Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
О типах зон
#1
Вечер добрый.

Хотелось бы узнать, как распознаются данные зоны:

Код:
    public static final int ZONE_PVP = 1;
    public static final int ZONE_PEACE = 2;
    public static final int ZONE_SIEGE = 4;
    public static final int ZONE_MOTHERTREE = 8;
    public static final int ZONE_CLANHALL = 16;
    public static final int ZONE_UNUSED = 32;
    public static final int ZONE_NOLANDING = 64;
    public static final int ZONE_WATER = 128;
    public static final int ZONE_JAIL = 256;
    public static final int ZONE_MONSTERTRACK = 512;
    public static final int ZONE_SWAMP = 1024;
    public static final int ZONE_NOSUMMONFRIEND = 2048;
    public static final int ZONE_OLY = 4096;
    public static final int ZONE_NOHQ = 8192;
    public static final int ZONE_DANGERAREA = 16384;

Т.е. если я хочу внести новую зону с определенными условиями и т.д. Я добавляю ее, например ZONE_SUPER = 32768;
Создаю L2SuperZone в gameserver\model\zone.

Но как сервер будет понимать что L2SuperZone - и есть ZONE_SUPER с ID(32768)? я имею ввиду - где привязывается зона к id или наоборот...

Будьте любезны, ткните носом...
Ответ
#2
У кого как, на интеровской лыже (Все, что сейчас есть под рукой) тип зоны указывался в zone.xml (data\zones)

Добавлено через 4 минуты
Да и последовательность действий у тебя какая-то не правильная. Смотря на то, что ты не берешь во внимание L2Character класс.Где, что и как добавлять. делать - расписывать сейчас не охота. Но если нужна уж сильно будет помощь - пиши.
// GPRS удалил подпись пользователя
Ответ
#3
Дальше, если Вы не заметили, идет массив зон, в которых находится персонаж

Код:
private final byte[] _zones = new byte[24];

На примере:
Делаем допустим Вашу ZONE_SUPER с маской 32768, при входе в зону персонажем значение по _zones[ZONE_SUPER] будет идти в ++. Проверка в зоне или нет будет проводится следующим образом в методе isInsideZone(final byte zone)

Цитата:_zones[zone] > 0;

Все просто. Естественно Вам нужно будет создать класс зоне на подобии L2MotherTreeZone и т.п.
Ответ
#4
Зона это какая-то площадь, в которой происходит что-то? Типа увеличение регена/новый скилл и тд?
Ответ
#5
В данном случае зона - это флаг зоны под тип зоны, площадь в этом роли не играет.

Дорогой ТС - вы можете сделать зону без флага зоны - если он вам не нужен и на входе в зону/выххожде выполнять какие-то джействия, также вы можете узнать какие чары находятся в зону - для этого флаг зоны тоже не нужен.

Чтобы было более понятно - зона - это имя класса в папке zone в геймсервере, в котором можно добавить какие-то действия. Потом имя этого класса ставится как тип зхоны в xml где эта зона задается с какой-то фигурой - которая определает где эта зона. Так понятнее?
Ответ
#6
Так, тогда еще один вопрос, можно ли скажем вставить мою ZONE_SUPER в эффект какого-нибудь скила?

Объясню оротоко: делаю скилл Chrono Sphere (Faceless Void; DOTA)
Ответ
#7
Сорри - я не знаю что это за скил и доту никогда не видел.
В л2 зону в скил вставить можно конечно - только я не понимаю зачем это может понадобится. Вставить зону в эффект - тоже возможно. В этом случае нужно обработчик типа скила или эффект которые будут что-то делать с зоной, но опять же у меня нету даже предположения зачем такое может понадобиться.

Если наоборот скил повесить в зоне - то да можно, двумя способами - либо взять тип зоны который отрабатывается скил на входе/выходе или написать скрипт который будет обрабатывать вход/выход из зоны в датапаке.
Ответ
#8
для такого скила совсем не нужно делать новую зону, а просто поправить словние на кого будет ложится еффект скила
Ответ
#9
Вы бы лучше задачу описали - было бы понятно.
Ответ
#10
linliss Написал:для такого скила совсем не нужно делать новую зону, а просто поправить словние на кого будет ложится еффект скила

Я вроде бы и создавал его, но меня не устраивает тот факт, что заклинание действует только на тех, кто в это время находился в радиусе действия способнсти...

Добавлено через 4 минуты
Visor Написал:Вы бы лучше задачу описали - было бы понятно.

1) Каст спелла
2) Появляется купол
3) Все, кто внутри, кроме самого кастера - останавливаются (Paralyze)
4) Все, кто входит в купол - тоже останавливаются

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

Пока у меня получалось только так:
1.Появляется купол
2.Все, кто внутри - останавливаются
3.Все кто входит - тоже останавливаются

Однако те кто входят, останавливаются на определенное время (то которое указанно в .xml скила, а мне бы хотелось сделать так, чтобы все кто вошли, останавливались на время действия самого спела...)

Купол висит скажем 10 секунд, все кто попали в него изначально - на 10 сек остановленны, кто вошел в него скажем через 4 секунды после юза скила, соответственно останавливается на 6 секунд...
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 6 Гость(ей)