Перейти к содержанию
Авторизация  
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) есть ли возможно на стороне сервера или клиента убрать эти синие и красные ауры? Я бы лучше заморочился со сменой цвета ника или чегото подобного.

  • Upvote 1

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


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

2) убрать setTeam и поставить нужное условие, setTitleColor или что нужно

1) примеры есть уже в разных сборках

Если цель и актив чар в 1 Тиме - запрет атаки итд

  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, Demoncool сказал:

Если цель и актив чар в 1 Тиме - запрет атаки итд

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

 

PS: Сборка Lost World

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

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


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

проверки возможности атаковать, находятся в ядре - метод isAttackable в Playable и т.п.

вот туда и пихать свои доп. проверки на возможность атаки цели

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

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


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, Gaikotsu сказал:

проверки возможности атаковать, находятся в ядре - метод isAttackable в Playable и т.п.

вот туда и пихать свои доп. проверки на возможность атаки цели

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

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


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

ну дак это все как раз и проверяется в выше указанном методе и связанных

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

вот к примеру у меня как идут проверки на эту тему в методе isCtrlAttackable класса Playable (у меня не лост, а овер, но это по сути то же самое - просто чуток более старое)

if (player.getPvPEventMode() > 0 || pcAttacker.getPvPEventMode() > 0)
{
	if (player.getPvPEventMode() != pcAttacker.getPvPEventMode())
		return false;

	if (player.getPvPEventMode() == 2 && player.getTeam() == pcAttacker.getTeam())
		return false;
}

метода getPvPEventMode() в стандартном овере нет (это я у себя уже вводил для разных проверок по аналогии с методом isInOlympiadMode()), но думаю сам смысл этих проверок тебе понятен.

тут у меня проверяется что если атакующий или атакуемый в данный момент учатсвуют в пвп-эвенте, то:

- если участвует только один из них - атаковать нельзя

- если пвп-эвент отрядный и атакующий и атакуемый в одном отряде - атаковать нельзя

подобные проверки имеются так же и в методе checkTarget класса Skill, чтобы во время эвента нельзя было кастовать плохие скиллы на свою команду и бафать/лечить чужую команду.

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

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


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, Gaikotsu сказал:

 


if (player.getPvPEventMode() > 0 || pcAttacker.getPvPEventMode() > 0)
{
	if (player.getPvPEventMode() != pcAttacker.getPvPEventMode())
		return false;

	if (player.getPvPEventMode() == 2 && player.getTeam() == pcAttacker.getTeam())
		return false;
}

 

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

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


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

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

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

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

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

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

Войти

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

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

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

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

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