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

pvpgate

Пользователи
  • Публикаций

    133
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3
  • Отзывы

    0%

Весь контент pvpgate

  1. Сейчас: есть метод checkTarget в классе skill, в нем куча обработок для разных типов скиллов. Он вызывается судя по всему в самом конце каста, из за него небыло докаста. Я хочу поставить эту обработку в нужное мне время, но не могу понять где он вызывается, даже IDEA не помогло, либо я туплю, что более вероятно.
  2. 1 - этот метод может вызываться в другом классе (и вызывается, и не раз) - это можно решить обычным поиском по содержанию по skill.checkTarget 2 - этот метод может вызываться через на следующий класс skill класс, тут уже поиск не поможет. Вобщем, мне нужно понимать в каком именно месте идет обращение к этому методу в конце каста, дабы попробовать удалить его, и добавить это же обращение в shedule в нужное по рассчету докаста время для каждого скилла.
  3. я пока не пробовал юзать никаких ИДЕ для л2... да и вообще не юзал их раньше, даже не представляю как открыть исходники одним проектом так сказать
  4. Всем привет, разбираюсь с кастом и прерыванием скиллов Сборка lostworld, в классе skill есть метод public SystemMsg checkTarget(Creature activeChar, Creature target, Creature aimingTarget, boolean forceUse, boolean first) в нем идет целая куча обработок для разного типа скиллов, итог которых сработает ли данный скилл на данный таргет Проблема в том, что данный метод вызывается в самом конце каста, хотя по идеи должен вызываться ~ после половины каста Собственно вопрос, где именно он вызывается при касте скилла? В каком классе?
  5. Кажется я что-то подобное сделал чтобы хранить принадлежность к командам в классе Player: private int _l2arenaSide = -1; public void setL2ArenaSide(final int i) { _l2arenaSide = i; } public int getL2ArenaSide() { return _l2arenaSide; } Впринципе сюда же можно сохранять координаты, в зависимости от тимы, вот только я не понял что такое map? Я так понимаю есть класс Location, у которого есть метод set(int x, int y, int z); Сейчас будет совсем глупый вопрос, а не могу ли я создать 2 объекта класса Location в классе Player, на подобии как я создал интовые _l2atenaSide, а потом сделать методы set() и get() для них? Если да, то как правильно создать объект типа Location и как правильно настроить set() и get() для него по аналогии с моей _l2arenaSide ?
  6. Добавил в RequestRestartPoint условия default: if(activeChar.isInL2ArenaMode()==true) { if(activeChar.getL2ArenaSide()==1) { activeChar.setPendingRevive(true); activeChar.teleToLocation(81992, -16040, -1888, activeChar.getActiveReflection()); } if(activeChar.getL2ArenaSide()==2) { activeChar.setPendingRevive(true); activeChar.teleToLocation(84232, -16696, -1840, activeChar.getActiveReflection()); } } но это не дело так хардкодить. Подскажи плз, как правильно в классе моей инсты задать 2 точки телепортации ? пробовал так: private static Location _blueloc = null; private static Location _redloc = null; _blueloc.set(81992, -16040, -1888); _blueloc.set(84232, -16696, -1840); Но ничего хорошего не получилось. Как задать их так, чтоб потом можно было обращаться к какому нибудь методу, возвращающему локацию по типу ctiveChar.teleToLocation(L2Arena.getBlueLoc(), activeChar.getActiveReflection()); ?
  7. спасибо. Еще один вопрос есть, можно ли точку респауна задавать динамически? Т.е. по сути я делаю некоторую модификацию ТВТ ивента, хочу чтобы при нажатии "в город" игроки ресались на своей стороне арены. Или же появлялась дополнительная кнопка, по аналогии "к флагу" на осаде, не важно, что можно что проще..
  8. pvpgate

    Дуели и ТВТ

    Спасибо большое, очень помог, касаемо этого все что хотел удалось реализовать
  9. pvpgate

    Дуели и ТВТ

    ок, но есть же уже такие вещи как TeamType.RED и BLUE или кланвары и т.д. для которых уже есть все проверки в ядре. Разве нельзя просто игроков причислить динамически к этим типам? Как то это же делается в ивентах и дуэлях, или я что то не так понимаю?
  10. pvpgate

    Дуели и ТВТ

    Спасибо, кэп ) Вот именно как это сделать - поставить запрет на атаку, или наоборот возможность атаковать без ctrl\ПК меня и интересует Пробовал смотреть твт ивент, но для меня это пока что слишком сложно, он наследует класс, который наследует класс, который наследует класс и т.д. раз 10. Полностью запутался. PS: Сборка Lost World
  11. pvpgate

    Дуели и ТВТ

    Доброго времени суток, я продолжаю разбираться с java, пробуя создать свой пвп ивент, и решил создать тему, т.к. мне нужна помощь по еще одному вопросу, не касающемуся соседней темы. Пытаюсь распределить игроков на команды, так, чтобы можно было атаковать игроков противоположной команды без флагания и ПК, а игроков своей команды - нет. Нашел класс TeamType, который я так понимаю используется в дуелях, и распределяет игроков на 2 команды: TeamType.BLUE и TeamType.RED. Написал присовение игроков к одной из двух команд при входе в инстанс зону: public class L2Arena extends Reflection { ArrayList<Player> arenaTeam1 = new ArrayList<Player>(); ArrayList<Player> arenaTeam2 = new ArrayList<Player>(); @Override public void onPlayerEnter(Player player) { super.onPlayerEnter(player); if(arenaTeam1.size()>arenaTeam2.size()) { arenaTeam2.add(player); player.setTeam(TeamType.RED); } else { arenaTeam1.add(player); player.setTeam(TeamType.BLUE); } } (листы arenaTeam1 и arenaTeam2 использую для того что-бы отправлять нового игрока в ту команду, где меньше игроков) Все срабатывает, вокруг игроков появляется красная или синяя аура, но на этом все. Они не могут атаковать друг друга без ctrl, при убийстве без флага становятся ПК, могут атаковать членов своей команды (через ктрл) и т.д. Единственное что изменилось - они не могут использовать СОЕ. Собственно есть 2 вопроса: 1) как сделать так чтобы игроки противоположных команд могли убивать друг друга без ctrl а игроки своей команды - нет. 2) есть ли возможно на стороне сервера или клиента убрать эти синие и красные ауры? Я бы лучше заморочился со сменой цвета ника или чегото подобного.
  12. Спасибо. А нет случайно примера где объявляется инстанса классе НПС? Я не совсем понимаю что это значит. Класс НПЦ должен наследовать класс моей инсты? Или просто надо импортировать класс моей инсты? и Как объявлять новый экземпляр класса моей инсты в классе нпс? Сори за глупые вопросы, только начинаю разбираться с java и ооп вообще.
  13. да, так и делаю, но ведь onPlayerEnter() я буду в классе инстанса допиливать и в нем нужно удалять из списка игроков Что-то типа public class L2Arena extends Reflection { ArrayList<Player> arenaTeam1 = new ArrayList<Player>(); ArrayList<Player> arenaTeam2 = new ArrayList<Player>(); @Override public void onPlayerExit(Player player) { super.onPlayerExit(player); player.sendMessage("Leave instance"); _visitors.remove(player.getObjectId()); arenaTeam1.remove(player); arenaTeam2.remove(player); } А добавлять в ту или иную команду мне нужно в классе НПЦ Я попробовал сделать костыль, и распределять по командам после входа на арену, а потом телепортировать в нужную точку арены: public class L2Arena extends Reflection { ArrayList<Player> arenaTeam1 = new ArrayList<Player>(); ArrayList<Player> arenaTeam2 = new ArrayList<Player>(); @Override public void onPlayerEnter(Player player) { super.onPlayerEnter(player); player.sendMessage("Enter instance"); if(arenaTeam1.size()>arenaTeam2.size()) { player.teleToLocation(84696, -16824, -1824, player.getActiveReflection()); arenaTeam2.add(player); player.sendMessage("add to team 2"); } else { player.teleToLocation(83304, -16024, -1888, player.getActiveReflection()); arenaTeam1.add(player); player.sendMessage("add to team 1"); } } добавил логирование, все происходит нормально, только вот улетаю я всегда на точку телепорта в xml инстанса и больше никуда не лечу, т.е. доп. телоепорты в IF-е ну срабатывают
  14. Слушай, а я же не смогу вызывать эту функцию прямо в классе своей инстанс зоны? Просто с одной стороны я в классе инстанс зоны должен удалять игроков из списка. А с другой стороны я в другом классе проверяю есть ли инстанс зона с таким названием, и если нет - создаю ее, а если да - телепортирую в существующую. И именно в этом месте, в байпасе, я должен решать в какую команду записывать игрока. Как я могу делать это в 2 классах?
  15. Извини, не понимаю. Я инстанс зону начал пробовать делать всего пару дней назад. а джаву и ооп вцелом начал осваивать незадолго до этого. В каком классе этот метод onLeave? Я так понимаю это в нем по умолчанию описано что у персонаж еще минуту после выхода будет принадлежать покинутой инстанс зоне? //upd кажется понял, это минуту живет зона. Если бы она жила час после вхыхода, то час игрок к ней бы и принадлежал... но все же, как удалить игрока из списка, в который он добавлен при входе в зону?
  16. Привет, это снова я, и опять же, чтобы не создавать новую тему, есть вопрос по инстансам. Как можно обрабатывать покидание инстанс зоны? Например по выходу из инстанс зоны (СОЕ, "в город" после смерти и т.д.) При входе я пробую причислить игроков к одной из 2 команд, а сразу при выходе хочу удалять игрока из списка команды. И второй вопрос, сложнее, можно ли имея списки игроков для 1 и 2 команды настроить, скажем, чтобы все игроки второй команды были варами для игрока первой команды. Или что-то типа такого, но не используя уродские RED и BLUE которые во всех ивентах и дуелях используются.
  17. интересно получается при логировании. getId() не подходит, т.к. дает Id рефлекта а не инстанс зоны. Кстати, при попытке логировать getId() во время цикла for(Reflection reflection : ReflectionManager.getInstance().getAll()) { .... } получаю сходу список из следующих id рефлктов: -3, -2, -1, 0 - я так понимаю это какие то стандартные рефлекты, типа под парнас, гиран харбор и т.д., ну а нулевой это основной мир. Не суть. Далее пробую логировать по getName() и тут становится все интереснее вариант с player.sendMessage(reflection.getName()); выдает пустое значение Но если сделать так: s=String.valueOf(reflection.getName()); player.sendMessage(s); то выдает пустые значения для рефлектов -3 -2 -1 и 0, и значнеие PVP для моего рефлекта. А вот самое интересное получается если логировать сразу название инст и ветки if: Reflection rexist = player.getReflection(); String s = "null"; for(Reflection reflection : ReflectionManager.getInstance().getAll()) { s=String.valueOf(reflection.getName()); player.sendMessage("s1 instance name = "+s); if(s == "PVP") { rexist = reflection; player.sendMessage("find PVP instance"); } else { player.sendMessage("s1!=PVP"); } } получаем следующий набор сообщений: s1 instance name = s1!=PVP s1 instance name = s1!=PVP s1 instance name = s1!=PVP s1 instance name =PVP s1!=PVP //upd разобрался, как написал Gaikotsu дело в том что надо сравнивать строки через equals
  18. да, уверен, я сперва захожу первым чаром в эту инсту, потом, не выходя, пытаюсь зайти вторым - создается новый рефлект. getCountByIzId у меня есть, сейчас попробоую таким способом
  19. и по ID не получилось if(rexist != null && rexist.getId() == 777) player.teleToLocation(84696, -16824, -1824, rexist); тоже улетает в новый рефлект. А есть какие то игровые методы логгирования? Я никаких IDE не использую...
  20. Пришлось еще добавить значение по умолчанию для rexist, а то The local variable may not have been initialized сделал это так: Reflection rexist = player.getReflection(); Сервер запустился без ошибок, но при попытке полететь в зону, когда она существует, каждый раз создается новый рефлект, т.е. всегда идет по ветке else ReflectionUtils.simpleEnterInstancedZone(player, 777); не понимаю почему, зона называется PVP, через //instance вижу ее название и что в ней есть игрок. Сам инстанс: <!DOCTYPE list SYSTEM "instances.dtd"> <list> <instance id="777" name="PVP" maxChannels="40" collapseIfEmpty="1" timelimit="1440" dispelBuffs="true"> <level min="1" max="85"/> <party min="1" max="1"/> <geodata map="22_17" /> <return loc="-88536 142104 -3648"/> <teleport loc="84696 -16824 -1824 29412" /> <reuse resetReuse="* * * * *" setUponEntry="false" sharedReuseGroup="0" /> <spawn mobId="32534" type="point"> <coords loc="84648 -16808 -1824 61567"/> </spawn> </instance> </list>
  21. Спасибо, понял, я тип присвоил на уровень ниже чем вызывал потом видимо..
  22. привет, у меня возник очередной вопрос, может ты, или кто-нибудь еще сможете подсказать, что-бы не создавтаь новых тем. Вобщем, вроде как разобрался с созданием нового рефлекта через ReflectionUtils.simpleEnterInstancedZone(player, id); Теперь хочу сделать так, что-бы рефлект этой зоны мог быть только один. Т.е если таких зон нет - создавать новый рефлект. Если такая зона существует - телепортировать в существующий рефлект. Вот что пока навоял public class L2Arena_impl { @Bypass("services.L2Arena_impl:goto_arena") public void goto_arena(Player player, NpcInstance npc, String[] arg) { for(Reflection reflection : ReflectionManager.getInstance().getAll()) { if(reflection.getName() == "PVP") { Reflection rexist = reflection; } } if(rexist.getName() == "PVP") //в этой строке ошибка rexist cannot be resolveв player.teleToLocation(84696, -16824, -1824, rexist); //в этой rexist cannot be resolved to a variable else ReflectionUtils.simpleEnterInstancedZone(player, 777); } @Bypass("services.L2Arena_impl:goto_back") public void goto_back(Player player, NpcInstance npc, String[] arg) { final Reflection ar = player.getActiveReflection(); player.teleToLocation(ar.getReturnLoc(), 0); } } Собственно что я делаю не так, и как это сделать правильно?
  23. откат - имеется ввиду что после выхода из зоны мне пишет что в след. раз я смогу зайти в нее после 6 утра. Я так понимаю в xml зоны это параметр reuse resetReuse но у меня в инстанс его нет, почему же он ставит по умолчанию 1 заход в сутки?
  24. Спасибо, вроде разобрался, правда пока не получилось сделать SimpleEnterInstancedZone в зону со своим классом, наследующим Reflection. Если я делаю это из другого класса он должен наследовать класс инстанс зоны? Или просто надо заимпортить класс инстанс зоны? И еще вопрос, я инстанс зону копировал с олимп арены, почему после входа у меня появляется откат? Где он указан по умолчанию и как убрать?
  25. Я только начинаю разбираться, ранее вообще с ооп не сталкивался, из программирования пишу только простенькие скрипты на Python для машинного обучения. Если можно, чуть чуть более структурировано. Спасибо заранее. В каком месте мы создаем новый инстанс того типа, который я указал в xml ? Как это делается? Я так понимаю после создания инстанс зоны этого типа ему присваивается ID, который уже и является уникальным ID локации, куда можно телепортировать игроков через teleToLocation(координаты, ID инсты). Но в каком именно месте мы говорим что, скажем, создадим-ка мы 10 инстанс зон одного типа и потом будем распихивать по ним игроков?
×
×
  • Создать...