Anderson 36 Опубликовано 29 марта, 2013 (изменено) 1)Суть: у меня твт в круме внизу, и для атаки другой тими нужно атаковать через контрл + нельзя юзать дбафы. Как это исправить? (насколько я понимаю проверку на ивент сунуть раньше проверки на зону, но просьба тыкнуть где и поподробней). Буду премного благодарен. П.С. Что бы не создавать новую тему: Есть protected Map<L2PcInstance, Integer> _scores = new FastMap<>(); нужно отсортировать по значению(не ключу), учебники по ява не помогли Изменено 29 марта, 2013 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 30 марта, 2013 Саму карту вы никак не отсортируете смотрите другие коллекции. Есть у меня pdf на эту тему завтра скину. По повмду твт ввиду отсутствия исходников посмотреть немогу. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 30 марта, 2013 Ок, про атаку еще буду смотреть но я не находил. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 30 марта, 2013 (изменено) Вот как и говорил что у меня где-то было про сортируемый список. Вам нужен такой вот класс: public class EventPlayer implements Comparable { private String _player; private Integer _points; public EventPlayer(String player, int points) { _player = player; _points = points; } public int getPoints() { return _points; } public void setPoints(int points) { _points = points; } public String getPlayer() { return _player; } public int compareTo(Object o) { EventPlayer otherPlayer = (EventPlayer)o; if (_points < otherPlayer.getPoints()) return -1; if (_points > otherPlayer.getPoints()) return 1; return 0; } public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; EventPlayer otherPlayer = (EventPlayer) o; return _player.equals(otherPlayer.getPlayer()); } } Если вам критично можете вместо String сделать L2PcInstance Ну и создаём сортирующийся список: import java.util.TreeSet; import java.util.SortedSet; public SortedSet score = new TreeSet; Заполнение как-то так: score.add(new EventPlayer("Vasya", 100500)); По поводу того как изменить кол-во игроков у игрока в списке оставлю вам подумать самостоятельно вместе с учебниками по Java, если не справитесь то в PDF'ке есть ответ, но попрбуйте разобраться без неё. Так интереснее и будет полещнее для развития как JAVA программиста. Ну и собственно PDF'ка http://rghost.ru/44890122 Изменено 30 марта, 2013 пользователем LeKToR 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 30 марта, 2013 По поводу атаки вам нужен метод public boolean isAutoAttackable(L2Character attacker) в классе L2PcInstance судя по коду из acis 28 добавлять проверку перед if (isInsideZone(ZONE_PVP) && cha.isInsideZone(ZONE_PVP)) Причем надо проверить что чар и его цель состоят в ТВТ и в разных командах 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 30 марта, 2013 (изменено) По поводу атаки вам нужен метод public boolean isAutoAttackable(L2Character attacker) в классе L2PcInstance судя по коду из acis 28 добавлять проверку перед if (isInsideZone(ZONE_PVP) && cha.isInsideZone(ZONE_PVP)) Причем надо проверить что чар и его цель состоят в ТВТ и в разных командах С проверками ясное дело, они у меня в классе ивента. А от еще, тут выходит я автоатачить не могу а скилом бить - могу, и не нахожу проверки, или я слепой. Да исходы ацисов, но я ивент систему немного переделал, то что вы написали хорошо конечно, но пока времени нет ее норм переписать, и там говнокод в виде вастМапа. На самом деле мне просто 3 участникам с наибольшим счетом нужно выдать разную награду. Ну я подумал что отсортировать будет проще всего, но тут то и возникла трудность) П.С. Точнее я не так выразился, у меня ТвТ проходит в Ивори, и бить можно только через ктрл (если не флаганутый, а на твт никто не флаганутый) + нельзя юзать дбафы, и нужно добавить если игрок на ивенте, что бы этого не было П.П.С. Если кому нужно, то сортировка: List<Entry<L2PcInstance, Integer>> entries = new ArrayList<>(_scores.entrySet()); Collections.sort(entries, new Comparator<Entry<L2PcInstance, Integer>>() { @Override public int compare(Entry<L2PcInstance, Integer> e1, Entry<L2PcInstance, Integer> e2) { int v1 = e1.getValue(); int v2 = e2.getValue(); return (v1 < v2) ? 1 : (v1 == v2) ? 0 : -1; } }); Изменено 30 марта, 2013 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 30 марта, 2013 List<Entry<L2PcInstance, Integer>> entries = new ArrayList<>(_scores.entrySet()); Collections.sort(entries, new Comparator<Entry<L2PcInstance, Integer>>() { @Override public int compare(Entry<L2PcInstance, Integer> e1, Entry<L2PcInstance, Integer> e2) { int v1 = e1.getValue(); int v2 = e2.getValue(); return (v1 < v2) ? 1 : (v1 == v2) ? 0 : -1; } }); Кстати в той PDF'ке на которую ссылка в моём 2м посте про этот метод тоже говорится. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 30 марта, 2013 (изменено) Кстати в той PDF'ке на которую ссылка в моём 2м посте про этот метод тоже говорится. Слушай, не могу найти почему-то, когда пробую атаковать дбафами пишет - Неправильная цель. Не могу ни по ид сис меседжа найти ни так, где проверка на скилы?) П.С. На своих то же самое, но скилы юзаются. Это нужно запретить. Изменено 30 марта, 2013 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 30 марта, 2013 (изменено) Ну к сожалению я не ванга без именяия исходников незнаю даже что сказать. Завтра попробую свой ТВТ на ацисах скрутить. Глянь метод doCast Изменено 30 марта, 2013 пользователем LeKToR 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 30 марта, 2013 (изменено) Мне кажется я нашел - checkPvpSkill(), сейчас проверяю, в пост скриптуме отпишу П.С. Да оно, все решилось, просто супер. Спасибо за помощь Изменено 30 марта, 2013 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 30 марта, 2013 (изменено) Надеюсь не много флужу, но это еще 1 вопрос: при старте выскакивает сбоку таймер и пишет Time left: , и при том то пропадает то появляется. Я хочу его убрать, но убей не понимаю как оно возникает, ну никак. Есть подозрение на шедулер: protected class EventScheduler implements Runnable { private ScheduledFuture<?> _task = null; private int _delay; public synchronized void schedule(int delay) { _delay = delay; if (_task != null) { cancel(); } run(); } public int getDelay() { return _delay / 1000; } @Override public synchronized void run() { if (_delay < 1000) { trigger(); _task = null; return; } handleCounter(_delay / 1000); _task = ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); _delay = _delay - 1000; } public synchronized void cancel() { if (_task != null) { _task.cancel(false); } _task = null; } } П.С. Тут же: у меня нет зависимости: сила атаки сзади у ножов, и от схила в спину тоже(что со спины что с лица). 1 раз скилы редактирую, как мне добавить это, намеком хотя бы Изменено 30 марта, 2013 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 31 марта, 2013 Надеюсь не много флужу, но это еще 1 вопрос: при старте выскакивает сбоку таймер и пишет Time left: , и при том то пропадает то появляется. Я хочу его убрать, но убей не понимаю как оно возникает, ну никак. Есть подозрение на шедулер: protected class EventScheduler implements Runnable { private ScheduledFuture<?> _task = null; private int _delay; public synchronized void schedule(int delay) { _delay = delay; if (_task != null) { cancel(); } run(); } public int getDelay() { return _delay / 1000; } @Override public synchronized void run() { if (_delay < 1000) { trigger(); _task = null; return; } handleCounter(_delay / 1000); _task = ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); _delay = _delay - 1000; } public synchronized void cancel() { if (_task != null) { _task.cancel(false); } _task = null; } } П.С. Тут же: у меня нет зависимости: сила атаки сзади у ножов, и от схила в спину тоже(что со спины что с лица). 1 раз скилы редактирую, как мне добавить это, намеком хотя бы По поводу таймера думаю проблема не в этом классе. По поводу урона от абилок со спины попробую поискать, но найду или нет хз. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 31 марта, 2013 (изменено) В хендлере скилов типа Blow прописан только шанс прохождения когда со спины, сбоку и спереди. Про изменение урона там вроде ничего нету. Определение того что чар использующий скил находится сзади своей цели if (activeChar.isBehindTarget()) И того что спереди if (activeChar.isInFrontOfTarget()) Изменено 31 марта, 2013 пользователем LeKToR 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 31 марта, 2013 (изменено) Таймер убрал, а от со скилами проблема( П.С. Все увидел меседж, сейчас посмотрю, но по офу со спины урон больше у ножей, проверку на спину засунуть в какую-то формулу дмаги? Изменено 31 марта, 2013 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 31 марта, 2013 Слуш, а можно по подробней? Блов это какие скиллы, и тут есть 1 скил - Backstab, именно он со спины должен бить намного больше. И + автоатака же со спины больше, разве нет? И я в этом коде просто запутался, шанс то нашел но дальше... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 31 марта, 2013 (изменено) Слуш, а можно по подробней? Блов это какие скиллы, и тут есть 1 скил - Backstab, именно он со спины должен бить намного больше. И + автоатака же со спины больше, разве нет? И я в этом коде просто запутался, шанс то нашел но дальше... Blow это скилы дагера которые имею шанс смертельного удара думаю дальше итак всё понятно. Изменено 1 апреля, 2013 пользователем LeKToR 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 31 марта, 2013 Vlow это скилы дагера которые имею шанс смертельного удара думаю дальше итак всё понятно. Спасибо, а не знаешь, действительно ли сзади урон от автоатак больше у ножей? И если так куда проверку впихнуть? + бекстаб должен критовать со спины Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 1 апреля, 2013 (изменено) Честно скажу, что вообще первый раз слышу, что со спины у дагера должен быть больше урон. Если это всё-таки так, то нужно будет найти где расчитывается дамаг и добавить проверку туда. Проверка должна проверять что текущее оружие дагер и чар находится сзади противника Ps: что-то кромё меня на ваши вопросы по ядру никто не отвечает. Изменено 1 апреля, 2013 пользователем LeKToR 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 2 апреля, 2013 Спасибо. Ага да, всем или лень или не шарят( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты