Thread: Friends chat issue

Results 1 to 7 of 7
  1. #1 Friends chat issue 
    Registered Member
    Join Date
    Jan 2015
    Posts
    58
    Thanks given
    1
    Thanks received
    2
    Rep Power
    11
    Gyazo - 88b729afe344a2911b49ab39b7c4f54b.png

    this is my issue i am having, i'm using matrix but when someone joins the friends chat they can't see the other player in the friends chat or see what they type it's like they're in seperate friends chat but its the same name how would I fix this?

    Code:
    package com.rs.game.player.content;
    
    import java.util.HashMap;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.CopyOnWriteArrayList;
    
    
    
    import com.rs.Settings;
    import com.rs.game.World;
    import com.rs.game.minigames.clanwars.ClanWars;
    import com.rs.game.player.FriendsIgnores;
    import com.rs.game.player.Player;
    import com.rs.game.player.QuickChatMessage;
    import com.rs.io.OutputStream;
    import com.rs.utils.SerializableFilesManager;
    import com.rs.utils.Utils;
    
    public class FriendChatsManager {
    
    	private String owner;
    	private String ownerDisplayName;
    	private FriendsIgnores settings;
    	private CopyOnWriteArrayList<Player> players;
    	private ConcurrentHashMap<String, Long> bannedPlayers;
    	private byte[] dataBlock;
    
    	/**
    	 * The clan wars instance (if the clan is in a war).
    	 */
    	private ClanWars clanWars;
    
    	private static HashMap<String, FriendChatsManager> cachedFriendChats;
    
    	public static void init() {
    		cachedFriendChats = new HashMap<String, FriendChatsManager>();
    	}
    
    	public int getRank(int rights, String username) {
    		if (rights == 2)
    			return 127;
    		if (username.equals(owner))
    			return 7;
    		return settings.getRank(username);
    	}
    
    	public CopyOnWriteArrayList<Player> getPlayers() {
    		return players;
    	}
    
    	public int getWhoCanKickOnChat() {
    		return settings.getWhoCanKickOnChat();
    	}
    
    	public String getOwnerDisplayName() {
    		return ownerDisplayName;
    	}
    
    	public String getOwnerName() {
    		return owner;
    	}
    
    	public String getChannelName() {
    		return settings.getChatName().replaceAll("<img=", "");
    	}
    
    	private void joinChat(Player player) {
    		synchronized (this) {
    			if (!player.getUsername().equals(owner) && !settings.hasRankToJoin(player.getUsername()) && player.getRights() < 2) {
    				player.getPackets() .sendGameMessage("You do not have a enough rank to join this friends chat channel.");
    				return;
    			}
    			if (players.size() >= 100) {
    				player.getPackets().sendGameMessage("This chat is full.");
    				return;
    			}
    			Long bannedSince = bannedPlayers.get(player.getUsername());
    			if (bannedSince != null) {
    				if (bannedSince + 3600000 > Utils.currentTimeMillis()) {
    					player.getPackets().sendGameMessage("You have been banned from this channel.");
    					return;
    				}
    				bannedPlayers.remove(player.getUsername());
    			}
    			joinChatNoCheck(player);
    		}
    	}
    
    	public void leaveChat(Player player, boolean logout) {
    		synchronized (this) {
    			player.setCurrentFriendChat(null);
    			players.remove(player);
    			if (players.size() == 0) { // no1 at chat so uncache it
    				synchronized (cachedFriendChats) {
    					cachedFriendChats.remove(owner);
    				}
    			} else
    				refreshChannel();
    			if (!logout) {
    				player.setCurrentFriendChatOwner(null);
    				player.getPackets().sendGameMessage(
    						"You have left the channel.");
    				player.getPackets().sendFriendsChatChannel();
    			}
    			if (clanWars != null) {
    				clanWars.leave(player, false);
    			}
    		}
    	}
    
    	public Player getPlayerByDisplayName(String username) {
    		String formatedUsername = Utils.formatPlayerNameForProtocol(username);
    		for (Player player : players) {
    			if (player.getUsername().equals(formatedUsername)
    					|| player.getDisplayName().equals(username))
    				return player;
    		}
    		return null;
    	}
    
    	public void kickPlayerFromChat(Player player, String username) {
    		String name = "";
    		for (char character : username.toCharArray()) {
    			name += Utils.containsInvalidCharacter(character) ? " " : character;
    		}
    		synchronized (this) {
    			int rank = getRank(player.getRights(), player.getUsername());
    			if (rank < getWhoCanKickOnChat())
    				return;
    			Player kicked = getPlayerByDisplayName(name);
    			if (kicked == null) {
    				player.getPackets().sendGameMessage(
    						"This player is not this channel.");
    				return;
    			}
    			if (rank <= getRank(kicked.getRights(), kicked.getUsername()))
    				return;
    			kicked.setCurrentFriendChat(null);
    			kicked.setCurrentFriendChatOwner(null);
    			players.remove(kicked);
    			bannedPlayers.put(kicked.getUsername(), Utils.currentTimeMillis());
    			kicked.getPackets().sendFriendsChatChannel();
    			kicked.getPackets().sendGameMessage(
    					"You have been kicked from the friends chat channel.");
    			player.getPackets().sendGameMessage(
    					"You have kicked " + kicked.getUsername()
    							+ " from friends chat channel.");
    			refreshChannel();
    
    		}
    	}
    
    	private void joinChatNoCheck(Player player) {
    		synchronized (this) {
    			players.add(player);
    			player.setCurrentFriendChat(this);
    			player.setCurrentFriendChatOwner(owner);
    			player.getPackets().sendGameMessage("You are now talking in the friends chat channel " + settings.getChatName());
    			refreshChannel();
    		}
    	}
    
    	public void destroyChat() {
    		synchronized (this) {
    			for (Player player : players) {
    				player.setCurrentFriendChat(null);
    				player.setCurrentFriendChatOwner(null);
    				player.getPackets().sendFriendsChatChannel();
    				player.getPackets().sendGameMessage("You have been removed from this channel!");
    			}
    		}
    		synchronized (cachedFriendChats) {
    			cachedFriendChats.remove(owner);
    		}
    
    	}
    
    	public void sendQuickMessage(Player player, QuickChatMessage message) {
    		synchronized (this) {
    			if (!player.getUsername().equals(owner)
    					&& !settings.canTalk(player) && player.getRights() < 2) {
    				player.getPackets()
    						.sendGameMessage(
    								"You do not have a enough rank to talk on this friends chat channel.");
    				return;
    			}
    			String formatedName = Utils.formatPlayerNameForDisplay(player
    					.getUsername());
    			String displayName = player.getDisplayName();
    			int rights = player.getRights();
    			for (Player p2 : players)
    				p2.getPackets().receiveFriendChatQuickMessage(formatedName,
    						displayName, rights, settings.getChatName(), message);
    		}
    	}
    
    	public void sendMessage(Player player, String message) {
    		synchronized (this) {
    			if (!player.getUsername().equals(owner) && !settings.canTalk(player) && player.getRights() < 2) {
    				player.getPackets().sendGameMessage("You do not have a enough rank to talk on this friends chat channel.");
    				return;
    			}
    			String formatedName = Utils.formatPlayerNameForDisplay(player.getUsername());
    			String displayName = player.getDisplayName();
    			int rights = player.getRights();
    			for (Player p2 : players)
    				p2.getPackets().receiveFriendChatMessage(formatedName, displayName, rights, settings.getChatName(), message);
    		}
    	}
    
    	public void sendDiceMessage(Player player, String message) {
    		synchronized (this) {
    			for (Player p2 : players) {
    				p2.getPackets().sendGameMessage(message);
    			}
    		}
    	}
    
    	private void refreshChannel() {
    		synchronized (this) {
    			OutputStream stream = new OutputStream();
    			stream.writeString(ownerDisplayName);
    			String ownerName = Utils.formatPlayerNameForDisplay(owner);
    			stream.writeByte(getOwnerDisplayName().equals(ownerName) ? 0 : 1);
    			if (!getOwnerDisplayName().equals(ownerName))
    				stream.writeString(ownerName);
    			stream.writeLong(Utils.stringToLong(getChannelName()));
    			int kickOffset = stream.getOffset();
    			stream.writeByte(0);
    			stream.writeByte(getPlayers().size());
    			for (Player player : getPlayers()) {
    				String displayName = player.getDisplayName();
    				String name = Utils.formatPlayerNameForDisplay(player
    						.getUsername());
    				stream.writeString(displayName);
    				stream.writeByte(displayName.equals(name) ? 0 : 1);
    				if (!displayName.equals(name))
    					stream.writeString(name);
    				stream.writeShort(1);
    				int rank = getRank(player.getRights(), player.getUsername());
    				stream.writeByte(rank);
    				stream.writeString(Settings.SERVER_NAME);
    			}
    			dataBlock = new byte[stream.getOffset()];
    			stream.setOffset(0);
    			stream.getBytes(dataBlock, 0, dataBlock.length);
    			for (Player player : players) {
    				dataBlock[kickOffset] = (byte) (player.getUsername().equals(
    						owner) ? 0 : getWhoCanKickOnChat());
    				player.getPackets().sendFriendsChatChannel();
    			}
    		}
    	}
    
    	public byte[] getDataBlock() {
    		return dataBlock;
    	}
    
    	private FriendChatsManager(Player player) {
    		owner = player.getUsername();
    		ownerDisplayName = player.getDisplayName();
    		settings = player.getFriendsIgnores();
    		players = new CopyOnWriteArrayList<Player>();
    		bannedPlayers = new ConcurrentHashMap<String, Long>();
    	}
    
    	public static void destroyChat(Player player) {
    		synchronized (cachedFriendChats) {
    			FriendChatsManager chat = cachedFriendChats.get(player
    					.getUsername());
    			if (chat == null)
    				return;
    			chat.destroyChat();
    			player.getPackets().sendGameMessage(
    					"Your friends chat channel has now been disabled!");
    		}
    	}
    
    	public static void linkSettings(Player player) {
    		synchronized (cachedFriendChats) {
    			FriendChatsManager chat = cachedFriendChats.get(player
    					.getUsername());
    			if (chat == null)
    				return;
    			chat.settings = player.getFriendsIgnores();
    		}
    	}
    
    	public static void refreshChat(Player player) {
    		synchronized (cachedFriendChats) {
    			FriendChatsManager chat = cachedFriendChats.get(player
    					.getUsername());
    			if (chat == null)
    				return;
    			chat.refreshChannel();
    		}
    	}
    
    	public static void joinChat(String ownerName, Player player) {
    		synchronized (cachedFriendChats) {
    			if (player.getCurrentFriendChat() != null)
    				return;
    			player.getPackets().sendGameMessage("Attempting to join channel...");
    			String formatedName = Utils.formatPlayerNameForProtocol(ownerName);
    			FriendChatsManager chat = cachedFriendChats.get(formatedName);
    			if (chat == null) {
    				Player owner = World.getPlayerByDisplayName(ownerName);
    				if (owner == null) {
    					if (!SerializableFilesManager.containsPlayer(formatedName)) {
    						player.getPackets().sendGameMessage("The channel you tried to join does not exist.");
    						return;
    					}
    					owner = World.findPlayer(formatedName);
    					if (owner == null) {
    						player.getPackets().sendGameMessage("The channel you tried to join does not exist.");
    						return;
    					}
    					owner.setUsername(formatedName);
    				}
    				FriendsIgnores settings = owner.getFriendsIgnores();
    				if (!settings.hasFriendChat()) {
    					player.getPackets().sendGameMessage("The channel you tried to join does not exist.");
    					return;
    				}
    				if (!player.getUsername().equals(ownerName) && !settings.hasRankToJoin(player.getUsername()) && player.getRights() < 2) {
    					player.getPackets().sendGameMessage("You do not have a enough rank to join this friends chat channel.");
    					return;
    				}
    				chat = new FriendChatsManager(owner);
    				cachedFriendChats.put(ownerName, chat);
    				chat.joinChatNoCheck(player);
    			} else
    				chat.joinChat(player);
    		}
    
    	}
    
    	/**
    	 * Gets the clanWars.
    	 * 
    	 * @return The clanWars.
    	 */
    	public ClanWars getClanWars() {
    		return clanWars;
    	}
    
    	/**
    	 * Sets the clanWars.
    	 * 
    	 * @param clanWars
    	 *            The clanWars to set.
    	 */
    	public void setClanWars(ClanWars clanWars) {
    		this.clanWars = clanWars;
    	}
    }
    this is the friendchatmanager.java
    Reply With Quote  
     

  2. #2  
    Registered Member
    Join Date
    May 2014
    Posts
    130
    Thanks given
    3
    Thanks received
    17
    Rep Power
    18
    If you're looking for like a help friends chat for people to join, you can automatically set them to join in player.java and that fixes that bug but only for that FC.
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    Jan 2015
    Posts
    58
    Thanks given
    1
    Thanks received
    2
    Rep Power
    11
    Quote Originally Posted by Para Charlie View Post
    If you're looking for like a help friends chat for people to join, you can automatically set them to join in player.java and that fixes that bug but only for that FC.
    That's what i have done and it didn't fix that bug
    Reply With Quote  
     

  4. #4  
    Registered Member
    Join Date
    Jan 2015
    Posts
    58
    Thanks given
    1
    Thanks received
    2
    Rep Power
    11
    bump
    Reply With Quote  
     

  5. #5  
    48 0x69

    Pax M's Avatar
    Join Date
    Oct 2013
    Posts
    2,008
    Thanks given
    36
    Thanks received
    488
    Rep Power
    2270
    Oh yeh, I've seen this issue in many leechs.
    You just have to delete the fc and create it again.
    Reply With Quote  
     

  6. Thankful user:


  7. #6  
    Registered Member
    Join Date
    Jan 2015
    Posts
    58
    Thanks given
    1
    Thanks received
    2
    Rep Power
    11
    Quote Originally Posted by Pax M View Post
    Oh yeh, I've seen this issue in many leechs.
    You just have to delete the fc and create it again.
    Thanks.
    Reply With Quote  
     

  8. #7  
    Registered Member
    Join Date
    Jan 2015
    Posts
    27
    Thanks given
    0
    Thanks received
    0
    Rep Power
    11
    Quote Originally Posted by Pax M View Post
    Oh yeh, I've seen this issue in many leechs.
    You just have to delete the fc and create it again.
    That won't fix the bug, that make it work temporarily maybe, but in the end the bug still prevails.
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. 667 - A few friends chat issues.
    By PvMLegacyTyler in forum Help
    Replies: 1
    Last Post: 11-23-2012, 06:00 PM
  2. Replies: 2
    Last Post: 05-07-2010, 04:58 PM
  3. Chat issue.
    By Deathfire138 in forum Help
    Replies: 0
    Last Post: 03-02-2010, 10:54 PM
  4. Friends List Issue
    By SkatersScapee in forum Help
    Replies: 0
    Last Post: 01-18-2010, 11:04 PM
  5. Friend List Issue [Will Repp++]
    By G R A P E D in forum Help
    Replies: 10
    Last Post: 08-17-2009, 11:05 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •