테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/src/com/aionemu/gameserver/network/aion/clientpackets/CM_CHAT_MESSAGE_PUBLIC.java
package com.aionemu.gameserver.network.aion.clientpackets;

import java.util.Set;

import com.aionemu.gameserver.model.ChatType;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.network.aion.AionClientPacket;
import com.aionemu.gameserver.network.aion.AionConnection.State;
import com.aionemu.gameserver.network.aion.serverpackets.SM_MESSAGE;
import com.aionemu.gameserver.restrictions.PlayerRestrictions;
import com.aionemu.gameserver.services.NameRestrictionService;
import com.aionemu.gameserver.services.player.PlayerChatService;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.utils.chathandlers.ChatProcessor;
import com.aionemu.gameserver.utils.stats.AbyssRankEnum;

/**
 * Packet that reads normal chat messages.<br>
 *
 * @author SoulKeeper
 */
public class CM_CHAT_MESSAGE_PUBLIC extends AionClientPacket {

	/**
	 * Chat type
	 */
	private ChatType type;

	/**
	 * Chat message
	 */
	private String message;

	public CM_CHAT_MESSAGE_PUBLIC(int opcode, Set<State> validStates) {
		super(opcode, validStates);
	}

	@Override
	protected void readImpl() {
		type = ChatType.getChatType(readC());
		message = readS();
	}

	@Override
	protected void runImpl() {
		final Player player = getConnection().getActivePlayer();

		if (ChatProcessor.getInstance().handleChatCommand(player, message))
			return;

		if (!PlayerRestrictions.canChat(player))
			return;

		PlayerChatService.logMessage(player, type, message);
		message = NameRestrictionService.filterMessage(message);

		switch (type) {
			case GROUP:
				if (!player.isInTeam())
					return;
				broadcastToGroupMembers(player);
				break;
			case ALLIANCE:
				if (!player.isInAlliance())
					return;
				broadcastToAllianceMembers(player);
				break;
			case GROUP_LEADER:
				if (!player.isInTeam())
					return;
				// Alert must go to entire group or alliance.
				if (player.isInGroup())
					broadcastToGroupMembers(player);
				else
					broadcastToAllianceMembers(player);
				break;
			case LEGION:
				if (!player.isLegionMember())
					return;
				broadcastToLegionMembers(player);
				break;
			case LEAGUE:
			case LEAGUE_ALERT:
				if (!player.isInLeague())
					return;
				broadcastToLeagueMembers(player);
				break;
			case NORMAL:
			case SHOUT:
				broadcastToPlayers(player);
				break;
			case COMMAND:
				if (player.getAbyssRank().getRank() == AbyssRankEnum.COMMANDER || player.getAbyssRank().getRank() == AbyssRankEnum.SUPREME_COMMANDER)
					broadcastFromCommander(player);
				break;
			default:
				if (!player.isStaff())
					return;
				broadcastToPlayers(player);
				break;
		}
	}

	private void broadcastFromCommander(final Player player) {
		final int senderRace = player.getRace().getRaceId();
		PacketSendUtility.broadcastPacket(player, new SM_MESSAGE(player, message, type), true,
			p -> senderRace == p.getRace().getRaceId() || player.isStaff() || p.isStaff());
	}

	/**
	 * Sends message to all players that are not in blocklist (except GMs)
	 *
	 * @param player
	 */
	private void broadcastToPlayers(final Player player) {
		PacketSendUtility.broadcastPacket(player, new SM_MESSAGE(player, message, type), true,
			p -> !p.getBlockList().contains(player.getObjectId()) || player.isStaff() || p.isStaff());
	}

	/**
	 * Sends message to all group members.
	 *
	 * @param player
	 */
	private void broadcastToGroupMembers(final Player player) {
		player.getCurrentGroup().sendPackets(new SM_MESSAGE(player, message, type));
	}

	/**
	 * Sends message to all alliance members
	 *
	 * @param player
	 */
	private void broadcastToAllianceMembers(final Player player) {
		player.getPlayerAlliance().sendPackets(new SM_MESSAGE(player, message, type));
	}

	/**
	 * Sends message to all league members
	 *
	 * @param player
	 */
	private void broadcastToLeagueMembers(final Player player) {
		player.getPlayerAlliance().getLeague().sendPackets(new SM_MESSAGE(player, message, type));
	}

	/**
	 * Sends message to all legion members
	 *
	 * @param player
	 */
	private void broadcastToLegionMembers(final Player player) {
		PacketSendUtility.broadcastToLegion(player.getLegion(), new SM_MESSAGE(player, message, type));
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0