Added ability to kick, ban, and unban players from chat rooms

This commit is contained in:
Waverunner
2015-07-29 10:49:23 -04:00
parent f94be3c0a9
commit bfc67b766c
9 changed files with 593 additions and 8 deletions
+3
View File
@@ -135,6 +135,9 @@ public enum PacketType {
CHAT_SYSTEM_MESSAGE (ChatSystemMessage.CRC, ChatSystemMessage.class),
CHAT_INVITE_AVATAR_TO_ROOM (ChatInviteAvatarToRoom.CRC, ChatInviteAvatarToRoom.class),
CHAT_UNINVITE_FROM_ROOM (ChatUninviteFromRoom.CRC, ChatUninviteFromRoom.class),
CHAT_KICK_AVATAR_FROM_ROOM (ChatKickAvatarFromRoom.CRC, ChatKickAvatarFromRoom.class),
CHAT_BAN_AVATAR_FROM_ROOM (ChatBanAvatarFromRoom.CRC, ChatBanAvatarFromRoom.class),
CHAT_UNBAN_AVATAR_FROM_ROOM (ChatUnbanAvatarFromRoom.CRC, ChatUnbanAvatarFromRoom.class),
CON_GENERIC_MESSAGE (ConGenericMessage.CRC, ConGenericMessage.class),
VOICE_CHAT_STATUS (VoiceChatStatus.CRC, VoiceChatStatus.class),
@@ -0,0 +1,78 @@
/*******************************************************************************
* Copyright (c) 2015 /// Project SWG /// www.projectswg.com
*
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies.
* Our goal is to create an emulator which will provide a server for players to
* continue playing a game similar to the one they used to play. We are basing
* it on the final publish of the game prior to end-game events.
*
* This file is part of Holocore.
*
* --------------------------------------------------------------------------------
*
* Holocore is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Holocore is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Holocore. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package network.packets.swg.zone.chat;
import network.packets.swg.SWGPacket;
import resources.chat.ChatAvatar;
import java.nio.ByteBuffer;
/**
* @author Waverunner
*/
public class ChatBanAvatarFromRoom extends SWGPacket {
public static final int CRC = getCrc("ChatBanAvatarFromRoom");
private ChatAvatar avatar;
private String room;
private int sequence;
public ChatBanAvatarFromRoom() {}
@Override
public void decode(ByteBuffer data) {
if (!super.decode(data, CRC))
return;
avatar = getEncodable(data, ChatAvatar.class);
room = getAscii(data);
sequence = getInt(data);
}
@Override
public ByteBuffer encode() {
ByteBuffer bb = ByteBuffer.allocate(12 + avatar.encode().length + room.length());
addShort(bb, 4);
addInt(bb, CRC);
addEncodable(bb, avatar);
addAscii(bb, room);
addInt(bb, sequence);
return bb;
}
public ChatAvatar getAvatar() {
return avatar;
}
public String getRoom() {
return room;
}
public int getSequence() {
return sequence;
}
}
@@ -0,0 +1,71 @@
/*******************************************************************************
* Copyright (c) 2015 /// Project SWG /// www.projectswg.com
*
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies.
* Our goal is to create an emulator which will provide a server for players to
* continue playing a game similar to the one they used to play. We are basing
* it on the final publish of the game prior to end-game events.
*
* This file is part of Holocore.
*
* --------------------------------------------------------------------------------
*
* Holocore is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Holocore is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Holocore. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package network.packets.swg.zone.chat;
import network.packets.swg.SWGPacket;
import resources.chat.ChatAvatar;
import java.nio.ByteBuffer;
/**
* @author Waverunner
*/
public class ChatKickAvatarFromRoom extends SWGPacket {
public static final int CRC = getCrc("ChatKickAvatarFromRoom");
private ChatAvatar avatar;
private String room;
public ChatKickAvatarFromRoom() {}
@Override
public void decode(ByteBuffer data) {
if (!super.decode(data, CRC))
return;
avatar = getEncodable(data, ChatAvatar.class);
room = getAscii(data);
}
@Override
public ByteBuffer encode() {
ByteBuffer bb = ByteBuffer.allocate(8 + avatar.encode().length);
addShort(bb, 3);
addInt(bb, CRC);
addEncodable(bb, avatar);
addAscii(bb, room);
return bb;
}
public ChatAvatar getAvatar() {
return avatar;
}
public String getRoom() {
return room;
}
}
@@ -0,0 +1,78 @@
/*******************************************************************************
* Copyright (c) 2015 /// Project SWG /// www.projectswg.com
*
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies.
* Our goal is to create an emulator which will provide a server for players to
* continue playing a game similar to the one they used to play. We are basing
* it on the final publish of the game prior to end-game events.
*
* This file is part of Holocore.
*
* --------------------------------------------------------------------------------
*
* Holocore is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Holocore is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Holocore. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package network.packets.swg.zone.chat;
import network.packets.swg.SWGPacket;
import resources.chat.ChatAvatar;
import java.nio.ByteBuffer;
/**
* @author Waverunner
*/
public class ChatOnBanAvatarFromRoom extends SWGPacket {
public static final int CRC = getCrc("ChatOnBanAvatarFromRoom");
private String room;
private ChatAvatar moderator;
private ChatAvatar target;
private int result;
private int sequence;
public ChatOnBanAvatarFromRoom(String room, ChatAvatar moderator, ChatAvatar target, int result, int sequence) {
this.room = room;
this.moderator = moderator;
this.target = target;
this.result = result;
this.sequence = sequence;
}
@Override
public void decode(ByteBuffer data) {
if (!super.decode(data, CRC))
return;
room = getAscii(data);
moderator = getEncodable(data, ChatAvatar.class);
target = getEncodable(data, ChatAvatar.class);
result = getInt(data);
sequence = getInt(data);
}
@Override
public ByteBuffer encode() {
ByteBuffer bb = ByteBuffer.allocate(16 + moderator.encode().length + target.encode().length + room.length());
addShort(bb, 6);
addInt(bb, CRC);
addAscii(bb, room);
addEncodable(bb, moderator);
addEncodable(bb, target);
addInt(bb, result);
addInt(bb, sequence);
return bb;
}
}
@@ -0,0 +1,74 @@
/*******************************************************************************
* Copyright (c) 2015 /// Project SWG /// www.projectswg.com
*
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies.
* Our goal is to create an emulator which will provide a server for players to
* continue playing a game similar to the one they used to play. We are basing
* it on the final publish of the game prior to end-game events.
*
* This file is part of Holocore.
*
* --------------------------------------------------------------------------------
*
* Holocore is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Holocore is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Holocore. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package network.packets.swg.zone.chat;
import network.packets.swg.SWGPacket;
import resources.chat.ChatAvatar;
import java.nio.ByteBuffer;
/**
* @author Waverunner
*/
public class ChatOnKickAvatarFromRoom extends SWGPacket {
public static final int CRC = getCrc("ChatOnKickAvatarFromRoom");
private ChatAvatar target;
private ChatAvatar moderator;
private int result;
private String room;
public ChatOnKickAvatarFromRoom(ChatAvatar target, ChatAvatar moderator, int result, String room) {
this.target = target;
this.moderator = moderator;
this.result = result;
this.room = room;
}
@Override
public void decode(ByteBuffer data) {
if (!super.decode(data, CRC))
return;
target = getEncodable(data, ChatAvatar.class);
moderator = getEncodable(data, ChatAvatar.class);
result = getInt(data);
room = getAscii(data);
}
@Override
public ByteBuffer encode() {
ByteBuffer bb = ByteBuffer.allocate(16 + target.encode().length + moderator.encode().length + room.length());
addShort(bb, 6);
addInt(bb, CRC);
addEncodable(bb, target);
addEncodable(bb, moderator);
addInt(bb, result);
addAscii(bb, room);
return bb;
}
}
@@ -0,0 +1,78 @@
/*******************************************************************************
* Copyright (c) 2015 /// Project SWG /// www.projectswg.com
*
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies.
* Our goal is to create an emulator which will provide a server for players to
* continue playing a game similar to the one they used to play. We are basing
* it on the final publish of the game prior to end-game events.
*
* This file is part of Holocore.
*
* --------------------------------------------------------------------------------
*
* Holocore is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Holocore is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Holocore. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package network.packets.swg.zone.chat;
import network.packets.swg.SWGPacket;
import resources.chat.ChatAvatar;
import java.nio.ByteBuffer;
/**
* @author Waverunner
*/
public class ChatOnUnbanAvatarFromRoom extends SWGPacket {
public static final int CRC = getCrc("ChatOnUnbanAvatarFromRoom");
private String room;
private ChatAvatar moderator;
private ChatAvatar target;
private int result;
private int sequence;
public ChatOnUnbanAvatarFromRoom(String room, ChatAvatar moderator, ChatAvatar target, int result, int sequence) {
this.room = room;
this.moderator = moderator;
this.target = target;
this.result = result;
this.sequence = sequence;
}
@Override
public void decode(ByteBuffer data) {
if (!super.decode(data, CRC))
return;
room = getAscii(data);
moderator = getEncodable(data, ChatAvatar.class);
target = getEncodable(data, ChatAvatar.class);
result = getInt(data);
sequence = getInt(data);
}
@Override
public ByteBuffer encode() {
ByteBuffer bb = ByteBuffer.allocate(16 + moderator.encode().length + target.encode().length + room.length());
addShort(bb, 6);
addInt(bb, CRC);
addAscii(bb, room);
addEncodable(bb, moderator);
addEncodable(bb, target);
addInt(bb, result);
addInt(bb, sequence);
return bb;
}
}
@@ -0,0 +1,76 @@
/*******************************************************************************
* Copyright (c) 2015 /// Project SWG /// www.projectswg.com
*
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies.
* Our goal is to create an emulator which will provide a server for players to
* continue playing a game similar to the one they used to play. We are basing
* it on the final publish of the game prior to end-game events.
*
* This file is part of Holocore.
*
* --------------------------------------------------------------------------------
*
* Holocore is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Holocore is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Holocore. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package network.packets.swg.zone.chat;
import network.packets.swg.SWGPacket;
import resources.chat.ChatAvatar;
import java.nio.ByteBuffer;
/**
* @author Waverunner
*/
public class ChatUnbanAvatarFromRoom extends SWGPacket {
public static final int CRC = getCrc("ChatUnbanAvatarFromRoom");
private ChatAvatar avatar;
private String room;
private int sequence;
@Override
public void decode(ByteBuffer data) {
if (!super.decode(data, CRC))
return;
avatar = getEncodable(data, ChatAvatar.class);
room = getAscii(data);
sequence = getInt(data);
}
@Override
public ByteBuffer encode() {
ByteBuffer bb = ByteBuffer.allocate(12 + avatar.encode().length + room.length());
addShort(bb, 4);
addInt(bb, CRC);
addEncodable(bb, avatar);
addAscii(bb, room);
addInt(bb, sequence);
return bb;
}
public ChatAvatar getAvatar() {
return avatar;
}
public String getRoom() {
return room;
}
public int getSequence() {
return sequence;
}
}
+8
View File
@@ -183,6 +183,14 @@ public class ChatRoom implements Encodable, Serializable {
return avatar.equals(owner) || moderators.contains(avatar);
}
public boolean isMember(ChatAvatar avatar) {
return members.contains(avatar);
}
public boolean isBanned(ChatAvatar avatar) {
return banned.contains(avatar);
}
public void sendMessage(ChatAvatar sender, String message, OutOfBandPackage oob, PlayerManager playerManager) {
ChatRoomMessage chatRoomMessage = new ChatRoomMessage(sender, getId(), message, oob);
sendPacketToMembers(playerManager, chatRoomMessage);
+127 -8
View File
@@ -32,23 +32,29 @@ import intents.chat.ChatRoomUpdateIntent;
import intents.network.GalacticPacketIntent;
import network.packets.Packet;
import network.packets.swg.SWGPacket;
import network.packets.swg.zone.chat.ChatBanAvatarFromRoom;
import network.packets.swg.zone.chat.ChatCreateRoom;
import network.packets.swg.zone.chat.ChatDestroyRoom;
import network.packets.swg.zone.chat.ChatEnterRoomById;
import network.packets.swg.zone.chat.ChatInviteAvatarToRoom;
import network.packets.swg.zone.chat.ChatKickAvatarFromRoom;
import network.packets.swg.zone.chat.ChatOnBanAvatarFromRoom;
import network.packets.swg.zone.chat.ChatOnCreateRoom;
import network.packets.swg.zone.chat.ChatOnDestroyRoom;
import network.packets.swg.zone.chat.ChatOnEnteredRoom;
import network.packets.swg.zone.chat.ChatOnInviteToRoom;
import network.packets.swg.zone.chat.ChatOnKickAvatarFromRoom;
import network.packets.swg.zone.chat.ChatOnLeaveRoom;
import network.packets.swg.zone.chat.ChatOnReceiveRoomInvitation;
import network.packets.swg.zone.chat.ChatOnSendRoomMessage;
import network.packets.swg.zone.chat.ChatOnUnbanAvatarFromRoom;
import network.packets.swg.zone.chat.ChatOnUninviteFromRoom;
import network.packets.swg.zone.chat.ChatQueryRoom;
import network.packets.swg.zone.chat.ChatQueryRoomResults;
import network.packets.swg.zone.chat.ChatRemoveAvatarFromRoom;
import network.packets.swg.zone.chat.ChatRequestRoomList;
import network.packets.swg.zone.chat.ChatSendToRoom;
import network.packets.swg.zone.chat.ChatUnbanAvatarFromRoom;
import network.packets.swg.zone.chat.ChatUninviteFromRoom;
import network.packets.swg.zone.insertion.ChatRoomList;
import resources.Terrain;
@@ -128,8 +134,7 @@ public class ChatRoomService extends Service {
enterChatChannel(player, enterRoomById.getRoomId(), enterRoomById.getSequence());
break; }
case CHAT_REMOVE_AVATAR_FROM_ROOM:
if (p instanceof ChatRemoveAvatarFromRoom)
leaveChatChannel(player, ((ChatRemoveAvatarFromRoom) p).getPath());
if (p instanceof ChatRemoveAvatarFromRoom) leaveChatChannel(player, ((ChatRemoveAvatarFromRoom) p).getPath());
break;
case CHAT_SEND_TO_ROOM:
if (p instanceof ChatSendToRoom) handleChatSendToRoom(player, (ChatSendToRoom) p);
@@ -149,6 +154,14 @@ public class ChatRoomService extends Service {
case CHAT_UNINVITE_FROM_ROOM:
if (p instanceof ChatUninviteFromRoom) handleChatUninviteFromRoom(player, (ChatUninviteFromRoom) p);
break;
case CHAT_KICK_AVATAR_FROM_ROOM:
if (p instanceof ChatKickAvatarFromRoom) handleChatKickAvatarFromRoom(player, (ChatKickAvatarFromRoom) p);
break;
case CHAT_BAN_AVATAR_FROM_ROOM:
if (p instanceof ChatBanAvatarFromRoom) handleChatBanAvatarFromRoom(player, (ChatBanAvatarFromRoom) p);
break;
case CHAT_UNBAN_AVATAR_FROM_ROOM:
if (p instanceof ChatUnbanAvatarFromRoom) handleChatUnbanAvatarFromRoom(player, (ChatUnbanAvatarFromRoom) p);
default: break;
}
}
@@ -163,6 +176,107 @@ public class ChatRoomService extends Service {
/* Chat Rooms */
private void handleChatUnbanAvatarFromRoom(Player player, ChatUnbanAvatarFromRoom p) {
String path = p.getRoom();
ChatAvatar target = p.getAvatar();
int sequence = p.getSequence();
ChatRoom room = getRoom(path);
ChatAvatar sender = ChatAvatar.getFromPlayer(player);
if (room == null) {
player.sendPacket(new ChatOnUnbanAvatarFromRoom(path, sender, target, ChatResult.ROOM_INVALID_NAME.getCode(), sequence));
return;
}
if (!room.isModerator(sender)) {
player.sendPacket(new ChatOnUnbanAvatarFromRoom(path, sender, target, ChatResult.ROOM_AVATAR_NO_PERMISSION.getCode(), sequence));
return;
}
if (!room.getBanned().remove(target)) {
player.sendPacket(new ChatOnUnbanAvatarFromRoom(path, sender, target, ChatResult.ROOM_AVATAR_BANNED.getCode(), sequence));
return;
}
room.sendPacketToMembers(player.getPlayerManager(), new ChatOnUnbanAvatarFromRoom(path, sender, target, ChatResult.SUCCESS.getCode(), sequence));
}
private void handleChatBanAvatarFromRoom(Player player, ChatBanAvatarFromRoom p) {
String path = p.getRoom();
ChatAvatar target = p.getAvatar();
int sequence = p.getSequence();
ChatRoom room = getRoom(path);
ChatAvatar sender = ChatAvatar.getFromPlayer(player);
if (room == null) {
player.sendPacket(new ChatOnBanAvatarFromRoom(path, sender, target, ChatResult.ROOM_INVALID_NAME.getCode(), sequence));
return;
}
if (!room.isModerator(sender)) {
player.sendPacket(new ChatOnBanAvatarFromRoom(path, sender, target, ChatResult.ROOM_AVATAR_NO_PERMISSION.getCode(), sequence));
return;
}
if (room.isBanned(target)) {
player.sendPacket(new ChatOnBanAvatarFromRoom(path, sender, target, ChatResult.ROOM_AVATAR_BANNED.getCode(), sequence));
return;
}
if (!room.isMember(target)) {
player.sendPacket(new ChatOnBanAvatarFromRoom(path, sender, target, ChatResult.TARGET_AVATAR_DOESNT_EXIST.getCode(), sequence));
return;
}
if (room.isModerator(target))
room.getModerators().remove(target);
if (room.getInvited().contains(target))
room.getInvited().remove(target);
room.getBanned().add(target);
room.sendPacketToMembers(player.getPlayerManager(), new ChatOnBanAvatarFromRoom(path, sender, target, ChatResult.SUCCESS.getCode(), sequence));
}
private void handleChatKickAvatarFromRoom(Player player, ChatKickAvatarFromRoom p) {
String path = p.getRoom();
ChatAvatar target = p.getAvatar();
ChatRoom room = getRoom(path);
ChatAvatar sender = ChatAvatar.getFromPlayer(player);
if (room == null) {
player.sendPacket(new ChatOnKickAvatarFromRoom(target, sender, ChatResult.ROOM_INVALID_NAME.getCode(), path));
return;
}
if (!room.isModerator(sender)) {
player.sendPacket(new ChatOnKickAvatarFromRoom(target, sender, ChatResult.ROOM_AVATAR_NO_PERMISSION.getCode(), path));
return;
}
if (!room.isMember(target)) {
player.sendPacket(new ChatOnKickAvatarFromRoom(target, sender, ChatResult.TARGET_AVATAR_DOESNT_EXIST.getCode(), path));
return;
}
Player targetPlayer = player.getPlayerManager().getPlayerByCreatureFirstName(target.getName());
if (targetPlayer == null) {
player.sendPacket(new ChatOnKickAvatarFromRoom(target, sender, ChatResult.TARGET_AVATAR_DOESNT_EXIST.getCode(), path));
return;
}
if (room.isMember(target)) {
player.sendPacket(new ChatOnKickAvatarFromRoom(target, sender, ChatResult.NONE.getCode(), path));
return;
}
room.sendPacketToMembers(player.getPlayerManager(), new ChatOnKickAvatarFromRoom(target, sender, ChatResult.SUCCESS.getCode(), path));
}
private void handleChatUninviteFromRoom(Player player, ChatUninviteFromRoom p) {
String path = p.getRoom();
ChatRoom room = getRoom(path);
@@ -175,18 +289,18 @@ public class ChatRoomService extends Service {
return;
}
if (room.isPublic()) {
player.sendPacket(new ChatOnUninviteFromRoom(path, sender, invitee, ChatResult.NONE.getCode(), p.getSequence()));
return;
}
if (!room.isModerator(sender)) {
player.sendPacket(new ChatOnUninviteFromRoom(path, sender, invitee, ChatResult.ROOM_AVATAR_NO_PERMISSION.getCode(), p.getSequence()));
return;
}
if (!room.getInvited().contains(invitee)) {
player.sendPacket(new ChatOnUninviteFromRoom(path, sender, invitee, ChatResult.ROOM_PRIVATE.getCode(), p.getSequence()));
return;
}
if (!room.getInvited().remove(invitee)) {
player.sendPacket(new ChatOnUninviteFromRoom(path, sender, invitee, ChatResult.NONE.getCode(), p.getSequence()));
player.sendPacket(new ChatOnUninviteFromRoom(path, sender, invitee, ChatResult.ROOM_PRIVATE.getCode(), p.getSequence()));
return;
}
@@ -203,6 +317,11 @@ public class ChatRoomService extends Service {
return;
}
if (room.isPublic()) {
player.sendPacket(new ChatOnInviteToRoom(path, sender, p.getAvatar(), ChatResult.NONE.getCode()));
return;
}
if (!room.isModerator(sender)) {
player.sendPacket(new ChatOnInviteToRoom(path, sender, p.getAvatar(), ChatResult.ROOM_AVATAR_NO_PERMISSION.getCode()));
return;