Перейти к содержанию
Авторизация  
Anderson

Атака И Скиллы

Рекомендуемые сообщения

1)Суть: у меня твт в круме внизу, и для атаки другой тими нужно атаковать через контрл + нельзя юзать дбафы. Как это исправить? (насколько я понимаю проверку на ивент сунуть раньше проверки на зону, но просьба тыкнуть где и поподробней).

Буду премного благодарен.

 

П.С. Что бы не создавать новую тему:

Есть protected Map<L2PcInstance, Integer> _scores = new FastMap<>();

нужно отсортировать по значению(не ключу), учебники по ява не помогли

Изменено пользователем Anderson

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Саму карту вы никак не отсортируете смотрите другие коллекции. Есть у меня pdf на эту тему завтра скину. По повмду твт ввиду отсутствия исходников посмотреть немогу.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок, про атаку еще буду смотреть но я не находил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот как и говорил что у меня где-то было про сортируемый список.

Вам нужен такой вот класс:

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

Изменено пользователем LeKToR
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу атаки вам нужен метод

public boolean isAutoAttackable(L2Character attacker)

в классе L2PcInstance судя по коду из acis 28

добавлять проверку перед

if (isInsideZone(ZONE_PVP) && cha.isInsideZone(ZONE_PVP))

Причем надо проверить что чар и его цель состоят в ТВТ и в разных командах

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу атаки вам нужен метод

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;
  }
 });

Изменено пользователем Anderson

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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м посте про этот метод тоже говорится.
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати в той PDF'ке на которую ссылка в моём 2м посте про этот метод тоже говорится.

Слушай, не могу найти почему-то, когда пробую атаковать дбафами пишет - Неправильная цель. Не могу ни по ид сис меседжа найти ни так, где проверка на скилы?)

П.С. На своих то же самое, но скилы юзаются. Это нужно запретить.

Изменено пользователем Anderson

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну к сожалению я не ванга без именяия исходников незнаю даже что сказать.

Завтра попробую свой ТВТ на ацисах скрутить.

Глянь метод doCast

Изменено пользователем LeKToR
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется я нашел - checkPvpSkill(), сейчас проверяю, в пост скриптуме отпишу

П.С. Да оно, все решилось, просто супер. Спасибо за помощь

Изменено пользователем Anderson

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надеюсь не много флужу, но это еще 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 раз скилы редактирую, как мне добавить это, намеком хотя бы

Изменено пользователем Anderson

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надеюсь не много флужу, но это еще 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 раз скилы редактирую, как мне добавить это, намеком хотя бы

По поводу таймера думаю проблема не в этом классе. По поводу урона от абилок со спины попробую поискать, но найду или нет хз.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В хендлере скилов типа Blow прописан только шанс прохождения когда со спины, сбоку и спереди. Про изменение урона там вроде ничего нету.

Определение того что чар использующий скил находится сзади своей цели

if (activeChar.isBehindTarget())

И того что спереди

if (activeChar.isInFrontOfTarget())

Изменено пользователем LeKToR
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Таймер убрал, а от со скилами проблема(

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

Изменено пользователем Anderson

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Слуш, а можно по подробней? Блов это какие скиллы, и тут есть 1 скил - Backstab, именно он со спины должен бить намного больше. И + автоатака же со спины больше, разве нет? И я в этом коде просто запутался, шанс то нашел но дальше...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Слуш, а можно по подробней? Блов это какие скиллы, и тут есть 1 скил - Backstab, именно он со спины должен бить намного больше. И + автоатака же со спины больше, разве нет? И я в этом коде просто запутался, шанс то нашел но дальше...

Blow это скилы дагера которые имею шанс смертельного удара думаю дальше итак всё понятно. Изменено пользователем LeKToR
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Vlow это скилы дагера которые имею шанс смертельного удара думаю дальше итак всё понятно.

Спасибо, а не знаешь, действительно ли сзади урон от автоатак больше у ножей? И если так куда проверку впихнуть? + бекстаб должен критовать со спины

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно скажу, что вообще первый раз слышу, что со спины у дагера должен быть больше урон. Если это всё-таки так, то нужно будет найти где расчитывается дамаг и добавить проверку туда. Проверка должна проверять что текущее оружие дагер и чар находится сзади противника

 

Ps: что-то кромё меня на ваши вопросы по ядру никто не отвечает.

Изменено пользователем LeKToR
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

Ага да, всем или лень или не шарят(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...