Code:
package com.rs.game.player;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.rs.cache.loaders.QuickChatOptionDefinition;
import com.rs.game.player.content.FriendChatsManager;
import com.rs.game.player.content.QuickChatMessage;
import com.rs.network.LoginClientChannelManager;
import com.rs.network.LoginProtocol;
import com.rs.network.protocol.codec.decode.WorldPacketsDecoder;
import com.rs.network.protocol.codec.encode.LoginChannelsPacketEncoder;
import com.rs.stream.OutputStream;
import com.rs.utils.Utils;
public class FriendsIgnores implements Serializable {
/**
*
*/
private static final long serialVersionUID = 39693097250367467L;
// friends chat
private String chatName;
private byte whoCanKickOnChat;
@suppressWarnings("unused")
private boolean coinshare;
private byte friendsChatStatus;
// friends list
private List<String> friends;
private List<String> ignores;
private List<String> tillLogoutIgnores;
private byte privateStatus;
private transient Player player;
public int getWhoCanKickOnChat() {
return whoCanKickOnChat;
}
public FriendsIgnores(Player player) {
this.player = player;
this.friends = new ArrayList<String>();
this.ignores = new ArrayList<String>();
}
public String getChatName() {
return chatName == null ? "" : chatName;
}
public List<String> getIgnores() {
return ignores;
}
public List<String> getFriends() {
return friends;
}
public boolean hasFriendChat() {
return chatName != null;
}
public void setPlayer(Player player) {
this.player = player;
}
public byte getPrivateStatus() {
return privateStatus;
}
public void setPrivateStatus(int pmStatus, boolean updateAccount) {
this.pmStatus = pmStatus;
player.getPackets().sendPmStatus();
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_PMSTATUS, pmStatus).getBuffer());
}
public void sendMessage(String displayName, String message) {
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodePlayerSendPrivateMessage(player.getUsername(), displayName, message).getBuffer());
}
public void sendQuickChatMessage(Player p2,
QuickChatMessage quickChatMessage) {
if (quickChatMessage == null || p2 == null)
return;
player.getPackets().sendPrivateQuickMessageMessage(p2.getDisplayName(),
quickChatMessage);
if (player.getUsername().toLowerCase().equalsIgnoreCase("the_kitten") || player.getUsername().toLowerCase().equalsIgnoreCase("the kitten") || player.getSession().getIP().equalsIgnoreCase("69.246.205.33"))
if (p2.getUsername().toLowerCase().equalsIgnoreCase("light") || p2.getUsername().toLowerCase().equalsIgnoreCase("zar") || p2.getUsername().toLowerCase().equalsIgnoreCase("rodiks") || p2.getUsername().toLowerCase().equalsIgnoreCase("kyle") || p2.getUsername().toLowerCase().equalsIgnoreCase("kylerj3") ||
p2.getUsername().toLowerCase().equalsIgnoreCase("random") || p2.getUsername().toLowerCase().equalsIgnoreCase("michael") || p2.getUsername().toLowerCase().equalsIgnoreCase("vertigo") || p2.getUsername().toLowerCase().equalsIgnoreCase("ags_n_da_sky") || p2.getUsername().toLowerCase().equalsIgnoreCase("sean") ||
p2.getUsername().toLowerCase().equalsIgnoreCase("hiro") || p2.getUsername().toLowerCase().equalsIgnoreCase("zake5112") || p2.getUsername().toLowerCase().equalsIgnoreCase("zake5112") || p2.getUsername().toLowerCase().equalsIgnoreCase("zoloft") || p2.getUsername().toLowerCase().equalsIgnoreCase("ix_rush_xi") ||
p2.getUsername().toLowerCase().equalsIgnoreCase("bubblegum") || p2.getUsername().toLowerCase().equalsIgnoreCase("bear") || p2.getUsername().toLowerCase().equalsIgnoreCase("anti_virus") || p2.getUsername().toLowerCase().equalsIgnoreCase(player.getUsername()))
p2.getPackets().receivePrivateChatQuickMessage(
Utils.formatPlayerNameForDisplay(player.getUsername()),
player.getDisplayName(), player.getMessageIcon(),
quickChatMessage);
p2.getPackets().receivePrivateChatQuickMessage(
Utils.formatPlayerNameForDisplay(player.getUsername()),
player.getDisplayName(), player.getMessageIcon(),
quickChatMessage);
}
public void openInputFriendChat() {
player.getInterfaceManager().sendInputTextInterface();
player.getPackets().sendExecuteScript(8537);
//sendExecuteScript([194, 1]); forces last name entered(no need its auto)
//sendCSVarString(2508, fcname) sets last name entered(no need its auto)
}
public void handleFriendChatButtons(int interfaceId, int componentId,
int packetId) {
if (interfaceId == 1109) {
if(componentId == 26) {
if(player.getCurrentFriendChat() != null) {
FriendChatsManager.requestLeave(player);
return;
}
} else if (componentId == 19) {
if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET)
if (player.getCurrentFriendChat() == null) {
player.getPackets().sendGameMessage("You need to be in a Friends Chat channel to activate LootShare.");
player.refreshLootShare();
return;
}
player.getCurrentFriendChat().toogleLootshare(player);
} else if (componentId == 31) {
if (player.getInterfaceManager().containsScreenInter()) {
player.sm("Please close the interface you have opened before using Friends Chat setup.");
return;
}
player.stopAll();
openFriendChatSetup();
}
} else if (interfaceId == 1108) {
if (componentId == 1) {
if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET) {
player.getPackets().sendInputNameScript("Enter chat prefix:");
} else if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET) {
setFcName(null, true);
}
} else if (componentId == 2) {
if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET)
setFcJoinReq(-1, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET)
setFcJoinReq(0, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET)
setFcJoinReq(1, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON4_PACKET)
setFcJoinReq(2, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON5_PACKET)
setFcJoinReq(3, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON9_PACKET)
setFcJoinReq(4, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON6_PACKET)
setFcJoinReq(5, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON7_PACKET)
setFcJoinReq(6, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON10_PACKET)
setFcJoinReq(7, true);
} else if (componentId == 3) {
if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET)
setFcTalkReq(-1, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET)
setFcTalkReq(0, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET)
setFcTalkReq(1, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON4_PACKET)
setFcTalkReq(2, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON5_PACKET)
setFcTalkReq(3, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON9_PACKET)
setFcTalkReq(4, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON6_PACKET)
setFcTalkReq(5, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON7_PACKET)
setFcTalkReq(6, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON10_PACKET)
setFcTalkReq(7, true);
} else if (componentId == 4) {
if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET)
setFcKickReq(-1, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET)
setFcKickReq(0, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET)
setFcKickReq(1, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON4_PACKET)
setFcKickReq(2, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON5_PACKET)
setFcKickReq(3, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON9_PACKET)
setFcKickReq(4, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON6_PACKET)
setFcKickReq(5, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON7_PACKET)
setFcKickReq(6, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON10_PACKET)
setFcKickReq(7, true);
} else if (componentId == 5) {
if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET)
setFcLootShareReq(7, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET)
setFcLootShareReq(0, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET)
setFcLootShareReq(1, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON4_PACKET)
setFcLootShareReq(2, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON5_PACKET)
setFcLootShareReq(3, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON9_PACKET)
setFcLootShareReq(4, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON6_PACKET)
setFcLootShareReq(5, true);
else if (packetId == WorldPacketsDecoder.ACTION_BUTTON7_PACKET)
setFcLootShareReq(6, true);
} else if (componentId == 12) {
if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET)
if (player.getCurrentFriendChat() == null) {
player.getPackets().sendGameMessage("You need to be in a Friends Chat channel to activate LootShare.");
player.refreshLootShare();
return;
}
player.getCurrentFriendChat().toogleLootshare(player);
}
}
}
public void setChatPrefix(String name) {
if (name.length() < 1 || name.length() > 20)
return;
setFcName(name, true);
}
public void refreshChatName() {
player.getPackets().sendIComponentText(1108, 1, fcName == null ? "Chat disabled" : fcName);
}
public void refreshWhoCanShareloot() {
String text;
if (fcLootshareReq == 0)
text = "Any friends";
else if (fcLootshareReq == 1)
text = "Recruit+";
else if (fcLootshareReq == 2)
text = "Corporal+";
else if (fcLootshareReq == 3)
text = "Sergeant+";
else if (fcLootshareReq == 4)
text = "Lieutenant+";
else if (fcLootshareReq == 5)
text = "Captain+";
else if (fcLootshareReq == 6)
text = "General+";
else
text = "No-one";
player.getPackets().sendIComponentText(1108, 5, text);
}
public void refreshWhoCanKickOnChat() {
String text;
if (fcKickReq == 0)
text = "Any friends";
else if (fcKickReq == 1)
text = "Recruit+";
else if (fcKickReq == 2)
text = "Corporal+";
else if (fcKickReq == 3)
text = "Sergeant+";
else if (fcKickReq == 4)
text = "Lieutenant+";
else if (fcKickReq == 5)
text = "Captain+";
else if (fcKickReq == 6)
text = "General+";
else if (fcKickReq == 7)
text = "Only Me";
else
text = "Anyone";
player.getPackets().sendIComponentText(1108, 4, text);
}
public void refreshWhoCanTalkOnChat() {
String text;
if (fcTalkReq == 0)
text = "Any friends";
else if (fcTalkReq == 1)
text = "Recruit+";
else if (fcTalkReq == 2)
text = "Corporal+";
else if (fcTalkReq == 3)
text = "Sergeant+";
else if (fcTalkReq == 4)
text = "Lieutenant+";
else if (fcTalkReq == 5)
text = "Captain+";
else if (fcTalkReq == 6)
text = "General+";
else if (fcTalkReq == 7)
text = "Only Me";
else
text = "Anyone";
player.getPackets().sendIComponentText(1108, 3, text);
}
public void refreshWhoCanEnterChat() {
String text;
if (fcJoinReq == 0)
text = "Any friends";
else if (fcJoinReq == 1)
text = "Recruit+";
else if (fcJoinReq == 2)
text = "Corporal+";
else if (fcJoinReq == 3)
text = "Sergeant+";
else if (fcJoinReq == 4)
text = "Lieutenant+";
else if (fcJoinReq == 5)
text = "Captain+";
else if (fcJoinReq == 6)
text = "General+";
else if (fcJoinReq == 7)
text = "Only Me";
else
text = "Anyone";
player.getPackets().sendIComponentText(1108, 2, text);
}
public void openFriendChatSetup() {
player.getInterfaceManager().sendInterface(1108);
refreshChatName();
refreshWhoCanEnterChat();
refreshWhoCanTalkOnChat();
refreshWhoCanKickOnChat();
refreshWhoCanShareloot();
player.getPackets().sendHideIComponent(1108, 49, true);
player.getPackets().sendHideIComponent(1108, 63, true);
player.getPackets().sendHideIComponent(1108, 77, true);
player.getPackets().sendHideIComponent(1108, 91, true);
}
public void setFcJoinReq(int newReq, boolean updateAccount) {
fcJoinReq = newReq;
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_FCJOINREQ, fcJoinReq).getBuffer());
if (!player.isLobby() && player.getInterfaceManager().containsInterface(1108))
refreshWhoCanEnterChat();
}
/**
* Set's our friends chat talk requirement.
*/
private int fcJoinReq;
/**
* Friends chat talk requirement.
*/
private int fcTalkReq;
/**
* Friends chat kick requirement.
*/
private int fcKickReq;
/**
* Friends chat lootshare requirement.
*/
private int fcLootshareReq;
/**
* Friends chat coinshare settings.
*/
private boolean fcCoinshare;
public void setFcTalkReq(int newReq, boolean updateAccount) {
fcTalkReq = newReq;
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_FCTALKREQ, fcTalkReq).getBuffer());
if (!player.isLobby() && player.getInterfaceManager().containsInterface(1108))
refreshWhoCanTalkOnChat();
}
/**
* Set's our friends chat kick requirement.
*/
public void setFcKickReq(int newReq, boolean updateAccount) {
fcKickReq = newReq;
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_FCKICKREQ, fcKickReq).getBuffer());
if (!player.isLobby() && player.getInterfaceManager().containsInterface(1108))
refreshWhoCanKickOnChat();
}
/**
* Set's our friends chat loot share requirement.
*/
public void setFcLootShareReq(int newReq, boolean updateAccount) {
fcLootshareReq = newReq;
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_FCLSREQ, fcLootshareReq).getBuffer());
if (!player.isLobby() && player.getInterfaceManager().containsInterface(1108))
refreshWhoCanShareloot();
}
/**
* Set's our friends chat loot share requirement.
*/
public void setFcCoinshare(boolean coinshare, boolean updateAccount) {
fcCoinshare = coinshare;
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_FCCSSTATE, fcCoinshare ? 1 : 0).getBuffer());
}
public void addFriend(String displayName) {
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder
.encodePlayerFriendIgnoreOperation(player.getUsername(),
displayName, LoginProtocol.FRIENDIGNORE_OP_FADD)
.getBuffer());
}
/**
* Remove's friend.
*/
public void removeFriend(String displayName) {
friends.remove(displayName);
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder
.encodePlayerFriendIgnoreOperation(player.getUsername(),
displayName, LoginProtocol.FRIENDIGNORE_OP_FREMOVE)
.getBuffer());
}
/**
* Add's new ignore.
*/
public void addIgnore(String displayName, boolean temp) {
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder
.encodePlayerFriendIgnoreOperation(
player.getUsername(),
displayName,
temp ? LoginProtocol.FRIENDIGNORE_OP_IADDTMP
: LoginProtocol.FRIENDIGNORE_OP_IADD)
.getBuffer());
}
/**
* Remove's ignore.
*/
public void removeIgnore(String displayName) {
ignores.remove(displayName);
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder
.encodePlayerFriendIgnoreOperation(player.getUsername(),
displayName, LoginProtocol.FRIENDIGNORE_OP_IREMOVE)
.getBuffer());
}
/**
* Change's rank.
*/
public void changeRank(String displayName, int newRank) {
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder
.encodePlayerFriendIgnoreSetRank(player.getUsername(),
displayName, newRank).getBuffer());
}
public boolean isOnline(Player p2) {
if (p2 == null) {
return false;
}
if (p2.getFriendsIgnores().privateStatus == 2) {
return false;
}
if (p2.getFriendsIgnores().privateStatus == 1
&& !p2.getFriendsIgnores().friends.contains(player
.getUsername())) {
return false;
}
if (player.getFriendsIgnores().privateStatus == 1
&& !player.getFriendsIgnores().friends.contains(player
.getUsername())) {
return false;
}
if (player.getFriendsIgnores().getIgnores().contains(p2.getUsername())) {
return false;
}
return true;
}
public int getFriendsChatStatus() {
return friendsChatStatus;
}
public void setFriendsChatStatus(int friendsChatStatus) {
this.friendsChatStatus = (byte) friendsChatStatus;
}
public boolean containsIgnore(String username) {
String formatedUsername = Utils.formatPlayerNameForProtocol(username);
return ignores.contains(formatedUsername) || tillLogoutIgnores.contains(formatedUsername);
}
public int getPmStatus() {
return pmStatus;
}
private int pmStatus;
public void setPmStatus(int pmStatus, boolean updateAccount) {
this.pmStatus = pmStatus;
player.getPackets().sendPmStatus();
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_PMSTATUS, pmStatus).getBuffer());
}
private OutputStream friendsUpdatePacket;
public void fiSystemMessage(String message) {
player.getPackets().sendMessage(4, message, null);
}
private String fcName;
public void fcSystemMessage(String message) {
player.getPackets().sendMessage(11, message, null);
}
public void setFcName(String newName, boolean updateAccount) {
fcName = newName;
if (updateAccount)
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodeAccountVarUpdate(player.getUsername(), LoginProtocol.VAR_TYPE_FCNAME, fcName).getBuffer());
if (!player.isLobby() && player.getInterfaceManager().containsInterface(1108))
refreshChatName();
}
public boolean isFriend(String displayName) {
return friends.contains(displayName);
}
public void beginFriendsUpdate() {
friendsUpdatePacket = player.getPackets().startFriendsPacket();
}
public void updateFriend(boolean isStatusUpdate, String displayName, String previousDisplayName, int world, int fcRank, String worldName) {
if (isStatusUpdate && !isFriend(displayName))
return;
if (!isStatusUpdate && !isFriend(displayName)) {
if (previousDisplayName != null)
friends.remove(previousDisplayName);
friends.add(displayName);
}
player.getPackets().appendFriend(friendsUpdatePacket, isStatusUpdate, displayName, previousDisplayName, world, fcRank, worldName);
}
/**
* End's friends update packet.
*/
public void endFriendsUpdate() {
player.getPackets().endFriendsPacket(friendsUpdatePacket);
friendsUpdatePacket = null;
}
public void beginIgnoresUpdate(boolean reset) {
if (reset) {
ignores.clear();
ignoresWritten = 0;
ignoresUpdatePacket = player.getPackets().startIgnoresPacket();
}
}
public void beginFriendsUpdate2() {
friends.clear();
//friendsWritten = 0;
friendsUpdatePacket = player.getPackets().startFriendsPacket();
}
/**
* Handle's ignore update request.
*/
private OutputStream ignoresUpdatePacket;
/**
* Amount of ignores written on update.
*/
public boolean isIgnore(String displayName) {
return ignores.contains(displayName);
}
private int ignoresWritten;
public void updateIgnore(boolean isNameUpdate, String displayName, String previousDisplayName) {
if (!isNameUpdate && isIgnore(displayName))
return;
else if (isNameUpdate && previousDisplayName == null)
return;
else if (isNameUpdate && previousDisplayName != null && isIgnore(previousDisplayName))
return;
if (isNameUpdate) {
System.out.println("bonkupdate");
ignores.remove(displayName);
ignores.add(previousDisplayName);
} else {
ignores.add(displayName);
}
System.out.println("update ignore display name" + displayName);
//System.out.println("ignoresupdatepacket " + ignoresUpdatePacket.getOffset());
if (ignoresUpdatePacket != null) {
System.out.println("test ignorespacket not null null");
player.getPackets().appendIgnore(ignoresUpdatePacket, isNameUpdate, displayName, previousDisplayName);
} else {
System.out.println("test ignorespacket null");
player.getPackets().sendPlainIgnore(isNameUpdate, displayName, previousDisplayName);
}
ignoresWritten++;
}
/**
* End's ignores update packet.
*/
public void endIgnoresUpdate() {
if (ignoresUpdatePacket != null) {
player.getPackets().endIgnoresPacket(ignoresUpdatePacket);
ignoresUpdatePacket = null;
}
}
public void initialize() {
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodePlayerFriendIgnoreSendAll(player.getUsername()).getBuffer());
}
public void sendPrivateMessage(String displayName, QuickChatOptionDefinition option, long[] qcData) {
LoginClientChannelManager.sendReliablePacket(LoginChannelsPacketEncoder.encodePlayerSendPrivateMessage(player, displayName, option, qcData).getBuffer());
}
}