Thread: Ruse Clan Chat

Results 1 to 8 of 8
  1. #1 Ruse Clan Chat 
    Jake from State Farm

    FKN Jake's Avatar
    Join Date
    Nov 2013
    Posts
    675
    Thanks given
    45
    Thanks received
    58
    Rep Power
    153
    On Ruse V2 Clan Chat it works like a charm, however on ruse v1 it's the exact opposite, but yet 95% the same code.

    RuseV2 GIF: (Flawless)
    https://gyazo.com/9d2d7e1f84adc853bd71b02867b1dd07

    RuseV1 GIF: (Can't promote past recruit)
    https://gyazo.com/83a2d5360c9f812c289b04c38da04ab6


    Ruse V2
    Code:
    package com.ruse.world.content.clan;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Map.Entry;
    
    import com.ruse.model.GameMode;
    import com.ruse.model.Item;
    import com.ruse.util.Misc;
    import com.ruse.util.NameUtils;
    import com.ruse.world.content.minigames.impl.TheSix;
    import com.ruse.world.entity.impl.npc.NPC;
    import com.ruse.world.entity.impl.player.Player;
    
    /**
     * 100% Runescape clanchat system.
     * @author Gabriel Hannason
     */
    public class ClanChatManager {
    
    	private static final String FILE_DIRECTORY = "./data/saves/clans/";
    
    	private static ClanChat[] clans = new ClanChat[3000];
    
    	public static ClanChat[] getClans() {
    		return clans;
    	}
    
    	public static ClanChat getClanChat(int index) {
    		return clans[index];
    	}
    
    	public static ClanChat getClanChatChannel(Player player) {
    		for(ClanChat clan : clans) {
    			if(clan == null || clan.getOwnerName() == null)
    				continue;
    			if(clan.getOwnerName().equals(player.getUsername())) {
    				return clan;
    			}
    		}
    		return null;
    	}
    
    	public static void init() {
    		try {
    			for (File file : (new File(FILE_DIRECTORY)).listFiles()) {
    				if(!file.exists())
    					continue;
    				DataInputStream input = new DataInputStream(new FileInputStream(file));
    				String name = input.readUTF();
    				String owner = input.readUTF();
    				int index = input.readShort();
    				ClanChat clan = new ClanChat(owner, name, index);
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_ENTER, ClanChatRank.forId(input.read()));
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_KICK, ClanChatRank.forId(input.read()));
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_TALK, ClanChatRank.forId(input.read()));
    			//	int totalRanks = input.readShort();
    				//for (int i = 0; i < totalRanks; i++) {
    				//	clan.getRankedNames().put(input.readUTF(), ClanChatRank.forId(input.read()));
    				//}
    			//	int totalBans = input.readShort();
    			//	for (int i = 0; i < totalBans; i++) {
    			//		clan.addBannedName(input.readUTF());
    			//	}
    				clans[index] = clan;
    				input.close();
    			}
    		} catch (IOException exception) {
    			exception.printStackTrace();
    		}
    	}
    
    	public static void writeFile(ClanChat clan) {
    		try {
    			File file = new File(FILE_DIRECTORY + clan.getName());
    			if (file.exists())
    				file.createNewFile();
    			DataOutputStream output = new DataOutputStream(new FileOutputStream(file));
    			output.writeUTF(clan.getName());
    			output.writeUTF(clan.getOwnerName());
    			output.writeShort(clan.getIndex());
    			output.write(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] != null ? clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].ordinal() : -1);
    			output.write(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] != null ? clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].ordinal() : -1);
    			output.write(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK] != null ? clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK].ordinal() : -1);
    			output.writeShort(clan.getRankedNames().size());
    			for (Entry<String, ClanChatRank> iterator : clan.getRankedNames().entrySet()) {
    				String name = iterator.getKey();
    				int rank = iterator.getValue().ordinal();
    				output.writeUTF(name);
    				output.write(rank);
    			}
    			output.writeShort(clan.getBannedNames().size());
    			for(String ban : clan.getBannedNames()) {
    				output.writeUTF(ban);
    			}
    			output.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static void save() {
    		for (ClanChat clan : clans) {
    			if (clan != null) {
    				writeFile(clan);
    			}
    		}
    	}
    
    	public static void createClan(Player player) {
    		player.getPacketSender().sendInterfaceRemoval();
    		if(getClanChatChannel(player) != null) {
    			player.getPacketSender().sendMessage("You have already created a clanchat channel.");
    			return;
    		}
    		File file = new File(FILE_DIRECTORY + player.getUsername());
    		if (file.exists())
    			file.delete();
    		ClanChat createdCc = create(player);
    		if(createdCc != null) {
    			if(player.getCurrentClanChat() == null) {
    				join(player, createdCc);
    			}
    			player.getPacketSender().sendMessage("You now have a clanchat channel. To enter the chat, simply use your name as keyword.");
    		}
    	}
    
    	public static void deleteClan(Player player) {
    		player.getPacketSender().sendInterfaceRemoval();
    		if (player.getCurrentClanChat() != null) {
    			player.getPacketSender().sendMessage("Please leave the clanchat channel you are currently in before doing this.");
    			return;
    		}
    		if(getClanChatChannel(player) == null) {
    			player.getPacketSender().sendMessage("You have not created a clanchat channel yet.");
    			return;
    		}
    		delete(player);
    	}
    
    	public static ClanChat create(Player player) {
    		File file = new File(FILE_DIRECTORY + player.getUsername());
    		if (file.exists()) {
    			player.getPacketSender().sendMessage("Your clan channel is already public!");
    			return null;
    		}
    		int index = getIndex();
    		if (index == -1) { // Too many clans
    			player.getPacketSender().sendMessage("An error occured! Please contact an administrator and report this.");
    			return null;
    		}
    		clans[index] = new ClanChat(player, player.getUsername(), index);
    		clans[index].getRankedNames().put(player.getUsername(), ClanChatRank.OWNER);
    		writeFile(clans[index]);
    		return clans[index];
    	}
    
    	public static void join(Player player, String channel) {
    		if(channel == null || channel.equals("null"))
    			return;
    		if (player.getCurrentClanChat() != null) {
    			player.getPacketSender().sendMessage("You are already in a clan channel.");
    			return;
    		}
    		channel = channel.toLowerCase();
    		for (ClanChat clan : clans) {
    			if (clan != null) {
    				if(clan.getName().toLowerCase().equals(channel)) {
    					join(player, clan);
    					return;
    				}
    			}
    		}
    		for (ClanChat clan : clans) {
    			if (clan != null) {
    				if(clan.getOwnerName().toLowerCase().equals(channel)) {
    					join(player, clan);
    					return;
    				}
    			}
    		}
    		player.getPacketSender().sendMessage("That channel does not exist.");
    	}
    
    	public static void updateList(ClanChat clan) {
    		Collections.sort(clan.getMembers(), new Comparator<Player>() {
    			@Override
    			public int compare(Player o1, Player o2) {
    				ClanChatRank rank1 = clan.getRank(o1);
    				ClanChatRank rank2 = clan.getRank(o2);
    				if(rank1 == null && rank2 == null) {
    					return 1;
    				}
    				if(rank1 == null && rank2 != null) {
    					return 1;
    				} else if(rank1 != null && rank2 == null) {
    					return -1;
    				}
    				if(rank1.ordinal() == rank2.ordinal()) {
    					return 1;
    				}
    				if(rank1 == ClanChatRank.OWNER) {
    					return -1;
    				} else if(rank2 == ClanChatRank.OWNER) {
    					return 1;
    				}
    				if(rank1.ordinal() > rank2.ordinal()) {
    					return -1;
    				}
    				return 1;
    			}
    		});
    		for (Player member : clan.getMembers()) {
    			if (member != null) {
    				int childId = 29344;
    				for (Player others : clan.getMembers()) {
    					if (others != null) {
    						ClanChatRank rank = clan.getRank(others);
    						int image = -1;
    						if(rank != null) {
    							image = 841 + rank.ordinal();
    						}
    						String prefix = image >= 0 ? ("<img=" + (image) +  "> ") : "";
    						member.getPacketSender().sendString(childId, prefix + others.getUsername());
    						childId++;
    					}
    				}
    				for (int i = childId; i < 29444; i++) {
    					member.getPacketSender().sendString(i, "");
    				}
    				ClanChatRank rank = clan.getRank(member);
    				if(rank != null) {
    					if(rank == ClanChatRank.OWNER || rank == ClanChatRank.STAFF) {
    						member.getPacketSender().sendClanChatListOptionsVisible(2); //Kick/demote/promote options
    					} else if(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] != null && rank.ordinal() >= clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].ordinal()) {
    						member.getPacketSender().sendClanChatListOptionsVisible(1); //only kick option
    					} else {
    						member.getPacketSender().sendClanChatListOptionsVisible(0); //no options
    					}
    				}
    			}
    		}
    	}
    
    	public static void sendMessage(Player player, String message) {
    		ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You're not in a clanchat channel.");
    			return;
    		}
    		ClanChatRank rank = clan.getRank(player);
    		if(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK] != null) {
    			if (rank == null || rank.ordinal() < clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK].ordinal()) {
    				player.getPacketSender().sendMessage("You do not have the required rank to speak in this channel.");
    				return;
    			}
    		}
    		String bracketColor = "<col=16777215>";
    		String clanNameColor = "<col=255>";
    		String nameColor = "@bla@";
    		String chatColor = "<col=993D00>";
    		for (Player memberPlayer : clan.getMembers()) {
    			if (memberPlayer != null) {
    				if(memberPlayer.getRelations().getIgnoreList().contains(player.getLongUsername()))
    					continue;
    				int img = player.getRights().ordinal();
    				if(!player.getRights().isStaff() && !player.getRights().isMember()) {
    					if(player.getGameMode() == GameMode.IRONMAN) {
    						img = 840;
    					} else if(player.getGameMode() == GameMode.HARDCORE_IRONMAN) {
    						img = 839;
    					}
    				}
    				
    				String rankImg = img > 0 ? " <img="+img+"> " : " ";
    				memberPlayer.getPacketSender().sendMessage(":clan:" + bracketColor + "[" + clanNameColor + clan.getName() + bracketColor + "]" + nameColor + ""+rankImg+"" +
    						NameUtils.capitalizeWords(player.getUsername()) +
    						": " + chatColor +
    						NameUtils.capitalize(message));
    			}
    		}
    	}
    
    	public static void sendMessage(ClanChat clan, String message) {
    		for (Player member : clan.getMembers()) {
    			if (member != null) {
    				member.getPacketSender().sendMessage(message);
    			}
    		}
    	}
    
    	public static void leave(Player player, boolean kicked) {
    		final ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You are not in a clanchat channel.");
    			return;
    		}
    		if(player.doingClanBarrows()) {
    			TheSix.leave(player, true);
    		}
    		player.getPacketSender().sendString(29340, "Talking in: N/A");
    		player.getPacketSender().sendString(29450, "Owner: N/A");
    		player.getPacketSender().sendString(29454, "Lootshare: N/A");
    		player.setCurrentClanChat(null);
    		clan.removeMember(player.getUsername());
    		for (int i = 29344; i < 29444; i++) {
    			player.getPacketSender().sendString(i, "");
    		}
    		player.getPacketSender().sendClanChatListOptionsVisible(0);
    		updateList(clan);
    		player.getPacketSender().sendMessage(kicked ? "You have been kicked from the channel." : "You have left the channel.");
    	}
    
    	private static void join(Player player, ClanChat clan) {
    		if (clan.getOwnerName().equals(player.getUsername())) {
    			if (clan.getOwner() == null) {
    				clan.setOwner(player);
    			}
    			clan.giveRank(player, ClanChatRank.OWNER);
    		}
    		player.getPacketSender().sendMessage("Attempting to join channel...");
    		if (clan.getMembers().size() >= 100) {
    			player.getPacketSender().sendMessage("This clan channel is currently full.");
    			return;
    		}
    		if(clan.isBanned(player.getUsername())) {
    			player.getPacketSender().sendMessage("You're currently banned from using this channel. Bans expire every 20 minutes.");
    			return;
    		}
    		checkFriendsRank(player, clan, false);
    		ClanChatRank rank = clan.getRank(player);
    		if (player.getRights().isStaff()) {
    			if(rank == null || rank != ClanChatRank.OWNER) {
    				rank = ClanChatRank.STAFF;
    				clan.giveRank(player, ClanChatRank.STAFF);
    			}
    		} else {
    			if(rank != null && rank == ClanChatRank.STAFF) {
    				clan.giveRank(player, null);
    			}
    		}
    		if (clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] != null) {
    			if (rank == null || clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].ordinal() > rank.ordinal()) {
    				player.getPacketSender().sendMessage("Your rank is not high enough to enter this channel.");
    				return;
    			}
    		}
    		player.setCurrentClanChat(clan);
    		player.setClanChatName(clan.getName());
    		String clanName = NameUtils.capitalizeWords(clan.getName());
    		clan.addMember(player);
    		player.getPacketSender().sendString(29340, "Talking in: @whi@" + clanName);
    		player.getPacketSender().sendString(29450, "Owner: " + NameUtils.capitalizeWords(clan.getOwnerName()));
    		player.getPacketSender().sendString(29454, "Lootshare: "+getLootshareStatus(clan));
    		player.getPacketSender().sendMessage("Now talking in "+clan.getOwnerName()+"'s channel.");
    		player.getPacketSender().sendMessage("To talk start each line of chat with the / symbol.");
    		updateList(clan);
    	}
    
    	public static void checkFriendsRank(Player player, ClanChat chat, boolean update) {
    		ClanChatRank rank = chat.getRank(player);
    		if(rank == null) {
    			if(chat.getOwner() != null && chat.getOwner().getRelations().isFriendWith(player.getUsername())) {
    				chat.giveRank(player, ClanChatRank.FRIEND);
    				if(update) {
    					updateList(chat);
    				}
    			}
    		} else {
    			if(rank == ClanChatRank.FRIEND && chat.getOwner() != null && !chat.getOwner().getRelations().isFriendWith(player.getUsername())) {
    				chat.giveRank(player, null);
    				if(update) {
    					updateList(chat);
    				}
    			}
    		}
    	}
    
    	public static void delete(Player player) {
    		ClanChat clan = getClanChatChannel(player);
    		File file = new File(FILE_DIRECTORY + clan.getName());
    		for (Player member : clan.getMembers()) {
    			if (member != null) {
    				leave(member, true);
    				member.setClanChatName("");
    			}
    		}
    		if(player.getClanChatName().equalsIgnoreCase(clan.getName())) {
    			player.setClanChatName("");
    		}
    		player.getPacketSender().sendMessage("Your clanchat channel was successfully deleted.");
    		clans[clan.getIndex()] = null;
    		file.delete();
    	}
    
    	public static void setName(Player player, String newName) {
    		final ClanChat clan = getClanChatChannel(player);
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You need to have a clan channel to do this.");
    			return;
    		}
    		if(newName.length() == 0)
    			return;
    		if (newName.length() > 12)
    			newName = newName.substring(0, 11);
    		if(new File(FILE_DIRECTORY + newName).exists()) {
    			player.getPacketSender().sendMessage("That clanchat name is already taken.");
    			return;
    		}
    		if(clan.getLastAction().elapsed(1000) || player.getRights().isStaff()) {
    			new File(FILE_DIRECTORY + clan.getName()).delete();
    			clan.setName(NameUtils.capitalizeWords(newName));
    			for(Player member : clan.getMembers()) {
    				if(member == null)
    					continue;
    				member.setClanChatName(clan.getName());
    				member.getPacketSender().sendString(29340, "Talking in: @whi@" + clan.getName());
    			}
    			clanChatSetupInterface(player, false);
    			writeFile(clan);
    			clan.getLastAction().reset();
    		} else {
    			player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    		}
    	}
    
    	public static void kick(Player player, Player target) {
    		ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You're not in a clan channel.");
    			return;
    		}
    		final ClanChatRank rank = clan.getRank(player);
    		if (rank == null || rank != ClanChatRank.STAFF && clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] != null && rank.ordinal() < clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].ordinal()) {
    			player.getPacketSender().sendMessage("You do not have the required rank to kick this player.");
    			return;
    		}
    		for (Player member : clan.getMembers()) {
    			if (member != null && member.equals(target)) {
    				ClanChatRank memberRank = clan.getRank(member);
    				if (memberRank != null) {
    					if(memberRank == ClanChatRank.STAFF) {
    						player.getPacketSender().sendMessage("That player cannot be kicked.");
    						break;
    					}
    					if(rank.ordinal() < memberRank.ordinal()) {
    						player.getPacketSender().sendMessage("You cannot kick a player who has a higher rank than you!");
    						break;
    					}
    				}
    				clan.addBannedName(member.getUsername());
    				leave(member, true);
    				sendMessage(player.getCurrentClanChat(), "<col=16777215>[<col=255>"+clan.getName() +"<col=16777215>]<col=3300CC> "+member.getUsername()+" has been kicked from the channel by "+player.getUsername()+".");
    				break;
    			}
    		}
    	}
    
    	public static void handleMemberOption(Player player, int index, int menuId) {
    		if ((player.getCurrentClanChat() == null || !player.getCurrentClanChat().getOwnerName().equals(player.getUsername())) && menuId != 1) {
    			player.getPacketSender().sendMessage("Only the clanchat owner can do that.");
    			return;
    		}
    		Player target = getPlayer(index, player.getCurrentClanChat());
    		if(target == null || target.equals(player)) {
    			return;
    		}
    		switch(menuId) {
    		case 8:
    		case 7:
    		case 6:
    		case 5:
    		case 4:
    		case 3:
    			ClanChatRank rank = ClanChatRank.forMenuId(menuId);
    			ClanChatRank targetRank = player.getCurrentClanChat().getRank(target);
    			if(targetRank != null) {
    				if(targetRank == rank) {
    					player.getPacketSender().sendMessage("That player already has that rank.");
    					return;
    				}
    				if(targetRank == ClanChatRank.STAFF) {
    					player.getPacketSender().sendMessage("That player cannot be promoted or demoted.");
    					return;
    				}
    			}
    			if(player.getCurrentClanChat().getLastAction().elapsed(1000) || player.getRights().isStaff()) {
    				player.getCurrentClanChat().giveRank(target, rank);
    				updateList(player.getCurrentClanChat());
    				sendMessage(player.getCurrentClanChat(), "<col=16777215>[<col=255>"+player.getCurrentClanChat().getName() +"<col=16777215>]<col=3300CC> "+target.getUsername()+" has been given the rank: "+Misc.formatText(rank.name().toLowerCase())+".");
    				player.getCurrentClanChat().getLastAction().reset();
    			} else {
    				player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    			}
    			break;
    		case 2:
    			targetRank = player.getCurrentClanChat().getRank(target);
    			if(targetRank == null) {
    				player.getPacketSender().sendMessage("That player has no rank.");
    				return;
    			}
    			if(targetRank == ClanChatRank.STAFF) {
    				player.getPacketSender().sendMessage("That player cannot be promoted or demoted.");
    				return;
    			}
    			if(player.getCurrentClanChat().getLastAction().elapsed(1000) || player.getRights().isStaff()) {
    				player.getCurrentClanChat().getRankedNames().remove(target.getUsername());
    				checkFriendsRank(target, player.getCurrentClanChat(), false);
    				updateList(player.getCurrentClanChat());
    				sendMessage(player.getCurrentClanChat(), "<col=16777215>[<col=255>"+player.getCurrentClanChat().getName() +"<col=16777215>]<col=3300CC> "+target.getUsername()+" has been demoted from his rank.");
    				player.getCurrentClanChat().getLastAction().reset();
    			} else {
    				player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    			}
    			break;
    		case 1:
    			kick(player, target);
    			break;
    		}
    	}
    
    	public static boolean dropShareLoot(Player player, NPC npc, Item itemDropped) {
    		/*	ClanChat clan = player.getFields().getClanChat();
    		if (clan != null) {
    			boolean received = false;
    			List<Player> players = getPlayersWithinPosition(clan, npc.getPosition());
    			String green = "<col=" + ClanChatMessageColor.GREEN.getRGB()[player.getFields().rgbIndex] + ">";
    			if (clan.isItemSharing() && itemDropped.getId() != 995) {
    				Player rewarded = players.size() > 0 ? players.get(MathUtils.random(players.size() - 1)) : null;
    				if (rewarded != null) {
    					rewarded.getPacketSender().sendMessage(green + "You have received " + itemDropped.getAmount() + "x " + itemDropped.getDefinition().getName() + ".");
    					received = true;
    				}
    			}
    			if (clan.isCoinSharing() && itemDropped.getId() == 995) {
    				for (Item drop : npc.getDrops()) {
    					if ((drop.getDefinition().getValue() * drop.getAmount()) < 10000) {
    						GroundItem groundItem = new GroundItem(drop, npc.getPosition().copy());
    						GameServer.getWorld().register(groundItem, player);
    						continue;
    					}
    					int amount = (int) (ItemDefinition.forId(drop.getId()).getValue() / players.size());
    					Item split = new Item(995, amount);
    					for (Player member : players) {
    						GroundItem groundItem = new GroundItem(split.copy(), npc.getPosition().copy());
    						GameServer.getWorld().register(groundItem, member);
    						member.getPacketSender().sendMessage(green + "You have received " + amount + "x " + split.getDefinition().getName() + " as part of a split drop.");
    					}
    				}
    			} else if(!clan.isItemSharing() && !clan.isCoinSharing() || !received)
    				return false;
    		} else
    			return false;*/
    		return false;
    	}
    
    	public static void toggleLootShare(Player player) {
    		final ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You're not in a clan channel.");
    			return;
    		}
    		if(!player.getRights().isStaff()) {
    			if(clan.getOwner() == null)
    				return;
    			if (!clan.getOwner().equals(player)) {
    				player.getPacketSender().sendMessage("Only the owner of the channel has the power to do this.");
    				return;
    			}
    		}
    		if(clan.getLastAction().elapsed(1000) || player.getRights().isStaff()) {
    			clan.setLootShare(!clan.getLootShare());
    			sendMessage(clan, "<col=16777215>[<col=255>"+clan.getName() +"<col=16777215>] <col=3300CC>"+player.getUsername()+" has "+(clan.getLootShare() ? "enabled" : "disabled")+" Lootshare.");
    			for (Player member : clan.getMembers()) {
    				if (member != null) {
    					member.getPacketSender().sendString(29454, "Lootshare: "+getLootshareStatus(clan));
    				}
    			}
    			clan.getLastAction().reset();
    		} else {
    			player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    		}
    	}
    
    	private static String getLootshareStatus(ClanChat clan) {
    		return clan.getLootShare() ? "@gre@On" : "Off";
    	}
    
    	private static int getIndex() {
    		for (int i = 0; i < clans.length; i++) {
    			if (clans[i] == null) {
    				return i;
    			}
    		}
    		return -1;
    	}
    
    	public static boolean handleClanChatSetupButton(Player player, int id) {
    		if(player.getInterfaceId() == 40172) {
    			final ClanChat clan = getClanChatChannel(player);
    			if (clan == null) {
    				return true;
    			}
    			switch(id) {
    			case -18281:
    			case -17529:
    			case -17530:
    			case -17531:
    			case -17532:
    			case -17533:
    			case -17534:
    			case -17535:
    			case -17536:
    				int l = -17529 - id;
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_ENTER, id == -18281 ? null : ClanChatRank.forId(l));
    				player.getPacketSender().sendMessage("You have changed your clanchat channel's settings.");
    				if (clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] != null) {
    					for(Player member : clan.getMembers()) {
    						if(member == null)
    							continue;
    						ClanChatRank rank = clan.getRank(member);
    						if (rank == null || clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].ordinal() > rank.ordinal() && rank != ClanChatRank.STAFF) {
    							member.getPacketSender().sendMessage("Your rank is not high enough to be in this channel.");
    							leave(member, false);
    							player.getPacketSender().sendMessage("@red@Warning! Changing that setting kicked the player "+member.getUsername()+" from the chat because").sendMessage("@red@ they do not have the required rank to be in the chat.");;
    						}
    					}
    				}
    				clanChatSetupInterface(player, false);
    				writeFile(clan);
    				return true;
    			case -18278:
    			case -17519:
    			case -17520:
    			case -17521:
    			case -17522:
    			case -17523:
    			case -17524:
    			case -17525:
    			case -17526:
    				l = -17519 - id;
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_TALK, id == -18278 ? null : ClanChatRank.forId(l));
    				player.getPacketSender().sendMessage("You have changed your clanchat channel's settings.");
    				clanChatSetupInterface(player, false);
    				writeFile(clan);
    				return true;
    			case -18275:
    			case -17510:
    			case -17511:
    			case -17512:
    			case -17513:
    			case -17514:
    			case -17515:
    				l = (-17510 - id) + 1;
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_KICK, id == -18275 ? null : ClanChatRank.forId(l));
    				player.getPacketSender().sendMessage("You have changed your clanchat channel's settings.");
    				clanChatSetupInterface(player, false);
    				updateList(clan);
    				writeFile(clan);
    				return true;
    			}
    		}
    		return false;
    	}
    
    	public static void clanChatSetupInterface(Player player, boolean check) {
    		player.getPacketSender().sendInterfaceRemoval();
    		ClanChat channel = getClanChatChannel(player);
    		if(check) {
    			if(channel == null) {
    				player.getPacketSender().sendMessage("You have not created a clanchat channel yet.");
    				return;
    			}
    		}
    		player.getPacketSender().sendString(47814, channel.getName());
    		if (channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] == null) {
    			player.getPacketSender().sendString(47815, "Anyone");
    		} else {
    			player.getPacketSender().sendString(47815, Misc.formatText(channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].name().toLowerCase())+"+");
    		}
    
    		if (channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK] == null) {
    			player.getPacketSender().sendString(47816, "Anyone");
    		} else {
    			player.getPacketSender().sendString(47816, Misc.formatText(channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK].name().toLowerCase())+"+");
    		}
    
    		if (channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] == null) {
    			player.getPacketSender().sendString(47817, "Only me");
    		} else {
    			player.getPacketSender().sendString(47817, Misc.formatText(channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].name().toLowerCase())+"+");
    		}
    
    		player.getPacketSender().sendInterface(40172);
    	}
    
    	public static void handleLogin(Player player) {
    		resetInterface(player);
    		ClanChatManager.join(player, player.getClanChatName());
    	}
    
    	public static void resetInterface(Player player) {
    		player.getPacketSender().sendString(29340, "Talking in: N/A");
    		player.getPacketSender().sendString(29450, "Owner: N/A");
    		player.getPacketSender().sendString(29454, "Lootshare: N/A");
    		for (int i = 29344; i < 29444; i++) {
    			player.getPacketSender().sendString(i, "");
    		}
    	}
    
    	public static Player getPlayer(int index, ClanChat clan) {
    		int clanIndex = 0;
    		for (Player members : clan.getMembers()) {
    			if (members != null) {
    				if(clanIndex == index) {
    					return members;
    				}
    				clanIndex++;
    			}
    		}
    		return null;
    	}
    }
    Ruse V1:
    Code:
    package com.arlania.world.content.clan;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Map.Entry;
    
    import com.arlania.model.GameMode;
    import com.arlania.model.Item;
    import com.arlania.util.Misc;
    import com.arlania.util.NameUtils;
    import com.arlania.world.entity.impl.npc.NPC;
    import com.arlania.world.entity.impl.player.Player;
    
    /**
     * 100% Runescape clanchat system.
     * @author Gabriel Hannason
     */
    public class ClanChatManager {
    
    	private static final String FILE_DIRECTORY = "./data/saves/clans/";
    
    	private static ClanChat[] clans = new ClanChat[3000];
    
    	public static ClanChat[] getClans() {
    		return clans;
    	}
    
    	public static ClanChat getClanChat(int index) {
    		return clans[index];
    	}
    
    	public static ClanChat getClanChatChannel(Player player) {
    		for(ClanChat clan : clans) {
    			if(clan == null || clan.getOwnerName() == null)
    				continue;
    			if(clan.getOwnerName().equals(player.getUsername())) {
    				return clan;
    			}
    		}
    		return null;
    	}
    
    	public static void init() {
    		try {
    			for (File file : (new File(FILE_DIRECTORY)).listFiles()) {
    				if(!file.exists())
    					continue;
    				DataInputStream input = new DataInputStream(new FileInputStream(file));
    				String name = input.readUTF();
    				String owner = input.readUTF();
    				int index = input.readShort();
    				ClanChat clan = new ClanChat(owner, name, index);
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_ENTER, ClanChatRank.forId(input.read()));
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_KICK, ClanChatRank.forId(input.read()));
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_TALK, ClanChatRank.forId(input.read()));
    			//	int totalRanks = input.readShort();
    				//for (int i = 0; i < totalRanks; i++) {
    				//	clan.getRankedNames().put(input.readUTF(), ClanChatRank.forId(input.read()));
    				//}
    			//	int totalBans = input.readShort();
    			//	for (int i = 0; i < totalBans; i++) {
    			//		clan.addBannedName(input.readUTF());
    			//	}
    				clans[index] = clan;
    				input.close();
    			}
    		} catch (IOException exception) {
    			exception.printStackTrace();
    		}
    	}
    
    	public static void writeFile(ClanChat clan) {
    		try {
    			File file = new File(FILE_DIRECTORY + clan.getName());
    			if (file.exists())
    				file.createNewFile();
    			DataOutputStream output = new DataOutputStream(new FileOutputStream(file));
    			output.writeUTF(clan.getName());
    			output.writeUTF(clan.getOwnerName());
    			output.writeShort(clan.getIndex());
    			output.write(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] != null ? clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].ordinal() : -1);
    			output.write(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] != null ? clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].ordinal() : -1);
    			output.write(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK] != null ? clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK].ordinal() : -1);
    			output.writeShort(clan.getRankedNames().size());
    			for (Entry<String, ClanChatRank> iterator : clan.getRankedNames().entrySet()) {
    				String name = iterator.getKey();
    				int rank = iterator.getValue().ordinal();
    				output.writeUTF(name);
    				output.write(rank);
    			}
    			output.writeShort(clan.getBannedNames().size());
    			for(String ban : clan.getBannedNames()) {
    				output.writeUTF(ban);
    			}
    			output.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static void save() {
    		for (ClanChat clan : clans) {
    			if (clan != null) {
    				writeFile(clan);
    			}
    		}
    	}
    
    	public static void createClan(Player player) {
    		player.getPacketSender().sendInterfaceRemoval();
    		if(getClanChatChannel(player) != null) {
    			player.getPacketSender().sendMessage("You have already created a clanchat channel.");
    			return;
    		}
    		File file = new File(FILE_DIRECTORY + player.getUsername());
    		if (file.exists())
    			file.delete();
    		ClanChat createdCc = create(player);
    		if(createdCc != null) {
    			if(player.getCurrentClanChat() == null) {
    				join(player, createdCc);
    			}
    			player.getPacketSender().sendMessage("You now have a clanchat channel. To enter the chat, simply use your name as keyword.");
    		}
    	}
    
    	public static void deleteClan(Player player) {
    		player.getPacketSender().sendInterfaceRemoval();
    		if (player.getCurrentClanChat() != null) {
    			player.getPacketSender().sendMessage("Please leave the clanchat channel you are currently in before doing this.");
    			return;
    		}
    		if(getClanChatChannel(player) == null) {
    			player.getPacketSender().sendMessage("You have not created a clanchat channel yet.");
    			return;
    		}
    		delete(player);
    	}
    
    	public static ClanChat create(Player player) {
    		File file = new File(FILE_DIRECTORY + player.getUsername());
    		if (file.exists()) {
    			player.getPacketSender().sendMessage("Your clan channel is already public!");
    			return null;
    		}
    		int index = getIndex();
    		if (index == -1) { // Too many clans
    			player.getPacketSender().sendMessage("An error occured! Please contact an administrator and report this.");
    			return null;
    		}
    		clans[index] = new ClanChat(player, player.getUsername(), index);
    		clans[index].getRankedNames().put(player.getUsername(), ClanChatRank.OWNER);
    		writeFile(clans[index]);
    		return clans[index];
    	}
    
    	public static void join(Player player, String channel) {
    		if(channel == null || channel.equals("null"))
    			return;
    		if (player.getCurrentClanChat() != null) {
    			player.getPacketSender().sendMessage("You are already in a clan channel.");
    			return;
    		}
    		channel = channel.toLowerCase();
    		for (ClanChat clan : clans) {
    			if (clan != null) {
    				if(clan.getName().toLowerCase().equals(channel)) {
    					join(player, clan);
    					return;
    				}
    			}
    		}
    		for (ClanChat clan : clans) {
    			if (clan != null) {
    				if(clan.getOwnerName().toLowerCase().equals(channel)) {
    					join(player, clan);
    					return;
    				}
    			}
    		}
    		player.getPacketSender().sendMessage("That channel does not exist.");
    	}
    
    	public static void updateList(ClanChat clan) {
    		Collections.sort(clan.getMembers(), new Comparator<Player>() {
    			@Override
    			public int compare(Player o1, Player o2) {
    				ClanChatRank rank1 = clan.getRank(o1);
    				ClanChatRank rank2 = clan.getRank(o2);
    				if(rank1 == null && rank2 == null) {
    					return 1;
    				}
    				if(rank1 == null && rank2 != null) {
    					return 1;
    				} else if(rank1 != null && rank2 == null) {
    					return -1;
    				}
    				if(rank1.ordinal() == rank2.ordinal()) {
    					return 1;
    				}
    				if(rank1 == ClanChatRank.OWNER) {
    					return -1;
    				} else if(rank2 == ClanChatRank.OWNER) {
    					return 1;
    				}
    				if(rank1.ordinal() > rank2.ordinal()) {
    					return -1;
    				}
    				return 1;
    			}
    		});
    		for (Player member : clan.getMembers()) {
    			if (member != null) {
    				int childId = 29344;
    				for (Player others : clan.getMembers()) {
    					if (others != null) {
    						ClanChatRank rank = clan.getRank(others);
    
    						int image = -1;
    						if(rank != null) {
    							image = 34 + rank.ordinal();
    						}
    
    						String prefix = image >= 0 ? ("<img=" + (image) +  "> ") : "";
    						member.getPacketSender().sendString(childId, prefix + others.getUsername());
    						childId++;
    					}
    				}
    				for (int i = childId; i < 29444; i++) {
    					member.getPacketSender().sendString(i, "");
    				}
    				ClanChatRank rank = clan.getRank(member);
    				if(rank != null) {
    					if(rank == ClanChatRank.OWNER || rank == ClanChatRank.STAFF) {
    						member.getPacketSender().sendClanChatListOptionsVisible(2); //Kick/demote/promote options
    					} else if(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] != null && rank.ordinal() >= clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].ordinal()) {
    						member.getPacketSender().sendClanChatListOptionsVisible(1); //only kick option
    					} else {
    						member.getPacketSender().sendClanChatListOptionsVisible(0); //no options
    					}
    				}
    			}
    		}
    	}
    
    	public static void sendMessage(Player player, String message) {
    		ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You're not in a clanchat channel.");
    			return;
    		}
    		ClanChatRank rank = clan.getRank(player);
    		if(clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK] != null) {
    			if (rank == null || rank.ordinal() < clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK].ordinal()) {
    				player.getPacketSender().sendMessage("You do not have the required rank to speak in this channel.");
    				return;
    			}
    		}
    		String bracketColor = "<col=16777215>";
    		String clanNameColor = "<col=255>";
    		String nameColor = "@bla@";
    		String chatColor = "<col=993D00>";
    		for (Player memberPlayer : clan.getMembers()) {
    			if (memberPlayer != null) {
    				if(memberPlayer.getRelations().getIgnoreList().contains(player.getLongUsername()))
    					continue;
    				int img = player.getRights().ordinal();
    				if(!player.getRights().isStaff() && !player.getRights().isMember()) {
    					if(player.getGameMode() == GameMode.IRONMAN) {
    						img = 840;
    					} else if(player.getGameMode() == GameMode.HARDCORE_IRONMAN) {
    						img = 839;
    					}
    				}
    				
    				String rankImg = img > 0 ? " <img="+img+"> " : " ";
    				memberPlayer.getPacketSender().sendMessage(":clan:" + bracketColor + "[" + clanNameColor + clan.getName() + bracketColor + "]" + nameColor + ""+rankImg+"" +
    						NameUtils.capitalizeWords(player.getUsername()) +
    						": " + chatColor +
    						NameUtils.capitalize(message));
    			}
    		}
    	}
    
    	public static void sendMessage(ClanChat clan, String message) {
    		for (Player member : clan.getMembers()) {
    			if (member != null) {
    				member.getPacketSender().sendMessage(message);
    			}
    		}
    	}
    
    	public static void leave(Player player, boolean kicked) {
    		final ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You are not in a clanchat channel.");
    			return;
    		}
    		player.getPacketSender().sendString(29340, "Talking in: N/A");
    		player.getPacketSender().sendString(29450, "Owner: N/A");
    		player.getPacketSender().sendString(29454, "Lootshare: N/A");
    		player.setCurrentClanChat(null);
    		clan.removeMember(player.getUsername());
    		for (int i = 29344; i < 29444; i++) {
    			player.getPacketSender().sendString(i, "");
    		}
    		player.getPacketSender().sendClanChatListOptionsVisible(0);
    		updateList(clan);
    		player.getPacketSender().sendMessage(kicked ? "You have been kicked from the channel." : "You have left the channel.");
    	}
    
    	private static void join(Player player, ClanChat clan) {
    		if (clan.getOwnerName().equals(player.getUsername())) {
    			if (clan.getOwner() == null) {
    				clan.setOwner(player);
    			}
    			clan.giveRank(player, ClanChatRank.OWNER);
    		}
    		player.getPacketSender().sendMessage("Attempting to join channel...");
    		if (clan.getMembers().size() >= 100) {
    			player.getPacketSender().sendMessage("This clan channel is currently full.");
    			return;
    		}
    		if(clan.isBanned(player.getUsername())) {
    			player.getPacketSender().sendMessage("You're currently banned from using this channel. Bans expire every 20 minutes.");
    			return;
    		}
    		checkFriendsRank(player, clan, false);
    		ClanChatRank rank = clan.getRank(player);
    		if (player.getRights().isStaff()) {
    			if(rank == null || rank != ClanChatRank.OWNER) {
    				rank = ClanChatRank.STAFF;
    				clan.giveRank(player, ClanChatRank.STAFF);
    			}
    		} else {
    			if(rank != null && rank == ClanChatRank.STAFF) {
    				clan.giveRank(player, null);
    			}
    		}
    		if (clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] != null) {
    			if (rank == null || clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].ordinal() > rank.ordinal()) {
    				player.getPacketSender().sendMessage("Your rank is not high enough to enter this channel.");
    				return;
    			}
    		}
    		player.setCurrentClanChat(clan);
    		player.setClanChatName(clan.getName());
    		String clanName = NameUtils.capitalizeWords(clan.getName());
    		clan.addMember(player);
    		player.getPacketSender().sendString(29340, "Talking in: @whi@" + clanName);
    		player.getPacketSender().sendString(29450, "Owner: " + NameUtils.capitalizeWords(clan.getOwnerName()));
    		player.getPacketSender().sendString(29454, "Lootshare: "+getLootshareStatus(clan));
    		player.getPacketSender().sendMessage("Now talking in "+clan.getOwnerName()+"'s channel.");
    		player.getPacketSender().sendMessage("To talk start each line of chat with the / symbol.");
    		updateList(clan);
    	}
    
    	public static void checkFriendsRank(Player player, ClanChat chat, boolean update) {
    		ClanChatRank rank = chat.getRank(player);
    		if(rank == null) {
    			if(chat.getOwner() != null && chat.getOwner().getRelations().isFriendWith(player.getUsername())) {
    				chat.giveRank(player, ClanChatRank.FRIEND);
    				if(update) {
    					updateList(chat);
    				}
    			}
    		} else {
    			if(rank == ClanChatRank.FRIEND && chat.getOwner() != null && !chat.getOwner().getRelations().isFriendWith(player.getUsername())) {
    				chat.giveRank(player, null);
    				if(update) {
    					updateList(chat);
    				}
    			}
    		}
    	}
    
    	public static void delete(Player player) {
    		ClanChat clan = getClanChatChannel(player);
    		File file = new File(FILE_DIRECTORY + clan.getName());
    		for (Player member : clan.getMembers()) {
    			if (member != null) {
    				leave(member, true);
    				member.setClanChatName("");
    			}
    		}
    		if(player.getClanChatName().equalsIgnoreCase(clan.getName())) {
    			player.setClanChatName("");
    		}
    		player.getPacketSender().sendMessage("Your clanchat channel was successfully deleted.");
    		clans[clan.getIndex()] = null;
    		file.delete();
    	}
    
    	public static void setName(Player player, String newName) {
    		final ClanChat clan = getClanChatChannel(player);
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You need to have a clan channel to do this.");
    			return;
    		}
    		if(newName.length() == 0)
    			return;
    		if (newName.length() > 12)
    			newName = newName.substring(0, 11);
    		if(new File(FILE_DIRECTORY + newName).exists()) {
    			player.getPacketSender().sendMessage("That clanchat name is already taken.");
    			return;
    		}
    		if(clan.getLastAction().elapsed(500) || player.getRights().isStaff()) {
    			new File(FILE_DIRECTORY + clan.getName()).delete();
    			clan.setName(NameUtils.capitalizeWords(newName));
    			for(Player member : clan.getMembers()) {
    				if(member == null)
    					continue;
    				member.setClanChatName(clan.getName());
    				member.getPacketSender().sendString(29340, "Talking in: @whi@" + clan.getName());
    			}
    			clanChatSetupInterface(player, false);
    			writeFile(clan);
    			clan.getLastAction().reset();
    		} else {
    			player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    		}
    	}
    
    	public static void kick(Player player, Player target) {
    		ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You're not in a clan channel.");
    			return;
    		}
    		final ClanChatRank rank = clan.getRank(player);
    		if (rank == null || rank != ClanChatRank.STAFF && clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] != null && rank.ordinal() < clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].ordinal()) {
    			player.getPacketSender().sendMessage("You do not have the required rank to kick this player.");
    			return;
    		}
    		for (Player member : clan.getMembers()) {
    			if (member != null && member.equals(target)) {
    				ClanChatRank memberRank = clan.getRank(member);
    				if (memberRank != null) {
    					if(memberRank == ClanChatRank.STAFF) {
    						player.getPacketSender().sendMessage("That player cannot be kicked.");
    						break;
    					}
    					if(rank.ordinal() < memberRank.ordinal()) {
    						player.getPacketSender().sendMessage("You cannot kick a player who has a higher rank than you!");
    						break;
    					}
    				}
    				clan.addBannedName(member.getUsername());
    				leave(member, true);
    				sendMessage(player.getCurrentClanChat(), "<col=16777215>[<col=255>"+clan.getName() +"<col=16777215>]<col=3300CC> "+member.getUsername()+" has been kicked from the channel by "+player.getUsername()+".");
    				break;
    			}
    		}
    	}
    
    	public static void handleMemberOption(Player player, int index, int menuId) {
    		if ((player.getCurrentClanChat() == null || !player.getCurrentClanChat().getOwnerName().equals(player.getUsername())) && menuId != 1) {
    			player.getPacketSender().sendMessage("Only the clanchat owner can do that.");
    			return;
    		}
    		Player target = getPlayer(index, player.getCurrentClanChat());
    		if(target == null || target.equals(player)) {
    			return;
    		}
    		switch(menuId) {
    		case 8:
    		case 7:
    		case 6:
    		case 5:
    		case 4:
    		case 3:
    			ClanChatRank rank = ClanChatRank.forMenuId(menuId);
    			ClanChatRank targetRank = player.getCurrentClanChat().getRank(target);
    			if(targetRank != null) {
    				if(targetRank == rank) {
    					player.getPacketSender().sendMessage("That player already has that rank.");
    					return;
    				}
    				if(targetRank == ClanChatRank.STAFF) {
    					player.getPacketSender().sendMessage("That player cannot be promoted or demoted.");
    					return;
    				}
    			}
    			if(player.getCurrentClanChat().getLastAction().elapsed(1000) || player.getRights().isStaff()) {
    				player.getCurrentClanChat().giveRank(target, rank);
    				updateList(player.getCurrentClanChat());
    				sendMessage(player.getCurrentClanChat(), "<col=16777215>[<col=255>"+player.getCurrentClanChat().getName() +"<col=16777215>]<col=3300CC> "+target.getUsername()+" has been given the rank: "+Misc.formatText(rank.name().toLowerCase())+".");
    				player.getCurrentClanChat().getLastAction().reset();
    			} else {
    				player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    			}
    			break;
    		case 2:
    			targetRank = player.getCurrentClanChat().getRank(target);
    			if(targetRank == null) {
    				player.getPacketSender().sendMessage("That player has no rank.");
    				return;
    			}
    			if(targetRank == ClanChatRank.STAFF) {
    				player.getPacketSender().sendMessage("That player cannot be promoted or demoted.");
    				return;
    			}
    			if(player.getCurrentClanChat().getLastAction().elapsed(1000) || player.getRights().isStaff()) {
    				player.getCurrentClanChat().getRankedNames().remove(target.getUsername());
    				checkFriendsRank(target, player.getCurrentClanChat(), false);
    				updateList(player.getCurrentClanChat());
    				sendMessage(player.getCurrentClanChat(), "<col=16777215>[<col=255>"+player.getCurrentClanChat().getName() +"<col=16777215>]<col=3300CC> "+target.getUsername()+" has been demoted from his rank.");
    				player.getCurrentClanChat().getLastAction().reset();
    			} else {
    				player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    			}
    			break;
    		case 1:
    			kick(player, target);
    			break;
    		}
    	}
    
    	public static boolean dropShareLoot(Player player, NPC npc, Item itemDropped) {
    		/*	ClanChat clan = player.getFields().getClanChat();
    		if (clan != null) {
    			boolean received = false;
    			List<Player> players = getPlayersWithinPosition(clan, npc.getPosition());
    			String green = "<col=" + ClanChatMessageColor.GREEN.getRGB()[player.getFields().rgbIndex] + ">";
    			if (clan.isItemSharing() && itemDropped.getId() != 995) {
    				Player rewarded = players.size() > 0 ? players.get(MathUtils.random(players.size() - 1)) : null;
    				if (rewarded != null) {
    					rewarded.getPacketSender().sendMessage(green + "You have received " + itemDropped.getAmount() + "x " + itemDropped.getDefinition().getName() + ".");
    					received = true;
    				}
    			}
    			if (clan.isCoinSharing() && itemDropped.getId() == 995) {
    				for (Item drop : npc.getDrops()) {
    					if ((drop.getDefinition().getValue() * drop.getAmount()) < 5000) {
    						GroundItem groundItem = new GroundItem(drop, npc.getPosition().copy());
    						GameServer.getWorld().register(groundItem, player);
    						continue;
    					}
    					int amount = (int) (ItemDefinition.forId(drop.getId()).getValue() / players.size());
    					Item split = new Item(995, amount);
    					for (Player member : players) {
    						GroundItem groundItem = new GroundItem(split.copy(), npc.getPosition().copy());
    						GameServer.getWorld().register(groundItem, member);
    						member.getPacketSender().sendMessage(green + "You have received " + amount + "x " + split.getDefinition().getName() + " as part of a split drop.");
    					}
    				}
    			} else if(!clan.isItemSharing() && !clan.isCoinSharing() || !received)
    				return false;
    		} else
    			return false;*/
    		return false;
    	}
    
    	public static void toggleLootShare(Player player) {
    		final ClanChat clan = player.getCurrentClanChat();
    		if (clan == null) {
    			player.getPacketSender().sendMessage("You're not in a clan channel.");
    			return;
    		}
    		if(!player.getRights().isStaff()) {
    			if(clan.getOwner() == null)
    				return;
    			if (!clan.getOwner().equals(player)) {
    				player.getPacketSender().sendMessage("Only the owner of the channel has the power to do this.");
    				return;
    			}
    		}
    		if(clan.getLastAction().elapsed(500) || player.getRights().isStaff()) {
    			clan.setLootShare(!clan.getLootShare());
    			sendMessage(clan, "<col=16777215>[<col=255>"+clan.getName() +"<col=16777215>] <col=3300CC>"+player.getUsername()+" has "+(clan.getLootShare() ? "enabled" : "disabled")+" Lootshare.");
    			for (Player member : clan.getMembers()) {
    				if (member != null) {
    					member.getPacketSender().sendString(29454, "Lootshare: "+getLootshareStatus(clan));
    				}
    			}
    			clan.getLastAction().reset();
    		} else {
    			player.getPacketSender().sendMessage("You need to wait a few seconds between every clanchat action.");
    		}
    	}
    
    	private static String getLootshareStatus(ClanChat clan) {
    		return clan.getLootShare() ? "@gre@On" : "Off";
    	}
    
    	private static int getIndex() {
    		for (int i = 0; i < clans.length; i++) {
    			if (clans[i] == null) {
    				return i;
    			}
    		}
    		return -1;
    	}
    
    	public static boolean handleClanChatSetupButton(Player player, int id) {
    		if(player.getInterfaceId() == 40172) {
    			final ClanChat clan = getClanChatChannel(player);
    			if (clan == null) {
    				return true;
    			}
    			switch(id) {
    			case -18281:
    			case -17529:
    			case -17530:
    			case -17531:
    			case -17532:
    			case -17533:
    			case -17534:
    			case -17535:
    			case -17536:
    				int l = -17529 - id;
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_ENTER, id == -18281 ? null : ClanChatRank.forId(l));
    				player.getPacketSender().sendMessage("You have changed your clanchat channel's settings.");
    				if (clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] != null) {
    					for(Player member : clan.getMembers()) {
    						if(member == null)
    							continue;
    						ClanChatRank rank = clan.getRank(member);
    						if (rank == null || clan.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].ordinal() > rank.ordinal() && rank != ClanChatRank.STAFF) {
    							member.getPacketSender().sendMessage("Your rank is not high enough to be in this channel.");
    							leave(member, false);
    							player.getPacketSender().sendMessage("@red@Warning! Changing that setting kicked the player "+member.getUsername()+" from the chat because").sendMessage("@red@ they do not have the required rank to be in the chat.");;
    						}
    					}
    				}
    				clanChatSetupInterface(player, false);
    				writeFile(clan);
    				return true;
    			case -18278:
    			case -17519:
    			case -17520:
    			case -17521:
    			case -17522:
    			case -17523:
    			case -17524:
    			case -17525:
    			case -17526:
    				l = -17519 - id;
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_TALK, id == -18278 ? null : ClanChatRank.forId(l));
    				player.getPacketSender().sendMessage("You have changed your clanchat channel's settings.");
    				clanChatSetupInterface(player, false);
    				writeFile(clan);
    				return true;
    			case -18275:
    			case -17510:
    			case -17511:
    			case -17512:
    			case -17513:
    			case -17514:
    			case -17515:
    				l = (-17510 - id) + 1;
    				clan.setRankRequirements(ClanChat.RANK_REQUIRED_TO_KICK, id == -18275 ? null : ClanChatRank.forId(l));
    				player.getPacketSender().sendMessage("You have changed your clanchat channel's settings.");
    				clanChatSetupInterface(player, false);
    				updateList(clan);
    				writeFile(clan);
    				return true;
    			}
    		}
    		return false;
    	}
    
    	public static void clanChatSetupInterface(Player player, boolean check) {
    		player.getPacketSender().sendInterfaceRemoval();
    		ClanChat channel = getClanChatChannel(player);
    		if(check) {
    			if(channel == null) {
    				player.getPacketSender().sendMessage("You have not created a clanchat channel yet.");
    				return;
    			}
    		}
    		player.getPacketSender().sendString(47814, channel.getName());
    		if (channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER] == null) {
    			player.getPacketSender().sendString(47815, "Anyone");
    		} else {
    			player.getPacketSender().sendString(47815, Misc.formatText(channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_ENTER].name().toLowerCase())+"+");
    		}
    
    		if (channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK] == null) {
    			player.getPacketSender().sendString(47816, "Anyone");
    		} else {
    			player.getPacketSender().sendString(47816, Misc.formatText(channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_TALK].name().toLowerCase())+"+");
    		}
    
    		if (channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK] == null) {
    			player.getPacketSender().sendString(47817, "Only me");
    		} else {
    			player.getPacketSender().sendString(47817, Misc.formatText(channel.getRankRequirement()[ClanChat.RANK_REQUIRED_TO_KICK].name().toLowerCase())+"+");
    		}
    
    		player.getPacketSender().sendInterface(40172);
    	}
    
    	public static void handleLogin(Player player) {
    		resetInterface(player);
    		ClanChatManager.join(player, player.getClanChatName());
    	}
    
    	public static void resetInterface(Player player) {
    		player.getPacketSender().sendString(29340, "Talking in: N/A");
    		player.getPacketSender().sendString(29450, "Owner: N/A");
    		player.getPacketSender().sendString(29454, "Lootshare: N/A");
    		for (int i = 29344; i < 29444; i++) {
    			player.getPacketSender().sendString(i, "");
    		}
    	}
    
    	public static Player getPlayer(int index, ClanChat clan) {
    		int clanIndex = 0;
    		for (Player members : clan.getMembers()) {
    			if (members != null) {
    				if(clanIndex == index) {
    					return members;
    				}
    				clanIndex++;
    			}
    		}
    		return null;
    	}
    }
    I've tried to keep the code as similar as possible to not break it, client sided it's handled the exact same way as well. If someone could shed some light on this I'd rep + thanks.

    If anyone wants to compare all 3 classes:

    Ruse V2:

    ClanChat

    ClanChatManager
    ClanChatRank

    Ruse V1 (95% based of ruse v2) :
    ClanChat
    ClanChatManager
    ClanChatRank
    Reply With Quote  
     

  2. #2  
    Aldor Manager


    Join Date
    Mar 2014
    Age
    28
    Posts
    1,234
    Thanks given
    200
    Thanks received
    297
    Rep Power
    2459
    show us getRank method
    Attached image

    Respect goes to everyone as he deserves.
    Reply With Quote  
     

  3. #3  
    Jake from State Farm

    FKN Jake's Avatar
    Join Date
    Nov 2013
    Posts
    675
    Thanks given
    45
    Thanks received
    58
    Rep Power
    153
    Quote Originally Posted by _Jamal View Post
    show us getRank method
    RuseV2:
    Code:
    	public ClanChatRank getRank(Player player) {
    		return rankedNames.get(player.getUsername());
    	}
    Ruse V1:
    Code:
    	public ClanChatRank getRank(Player player) {
    		return rankedNames.get(player.getUsername());
    	}

    If anyone wants to compare all 3 classes:

    Ruse V2:

    ClanChat

    ClanChatManager
    ClanChatRank

    Ruse V1 (95% based of ruse v2) :
    ClanChat
    ClanChatManager
    ClanChatRank

    bump, is anyone willing to at least teamview and take a look?

    Or @professor oak did you have to change any packets?
    Reply With Quote  
     

  4. #4  
    Community Veteran


    Arch337's Avatar
    Join Date
    Sep 2008
    Posts
    2,950
    Thanks given
    210
    Thanks received
    349
    Rep Power
    1376
    debug "targetRank" and "rank" due to them being the same for some reason.
    Look through your method of adding ranks and see what they set.


    "A fail act is something you do regular, but a dumb act is something you can learn from"
    Spoiler for Problem?:
    Reply With Quote  
     

  5. #5  
    Jake from State Farm

    FKN Jake's Avatar
    Join Date
    Nov 2013
    Posts
    675
    Thanks given
    45
    Thanks received
    58
    Rep Power
    153
    Quote Originally Posted by arch337 View Post
    debug "targetRank" and "rank" due to them being the same for some reason.
    Look through your method of adding ranks and see what they set.
    Attached image

    Had it print out rank and targetrank, on the non-working source it just says recruit recruit instead of rank - targetrank
    Reply With Quote  
     

  6. #6  
    Community Veteran


    Arch337's Avatar
    Join Date
    Sep 2008
    Posts
    2,950
    Thanks given
    210
    Thanks received
    349
    Rep Power
    1376
    Quote Originally Posted by Yalu View Post
    Attached image

    Had it print out rank and targetrank, on the non-working source it just says recruit recruit instead of rank - targetrank
    Code:
    					if (others != null) {
    						ClanChatRank rank = clan.getRank(others);
    
    						int image = -1;
    						if(rank != null) {
    							image = 34 + rank.ordinal();
    						}
    
    						String prefix = image >= 0 ? ("<img=" + (image) +  "> ") : "";
    						member.getPacketSender().sendString(childId, prefix + others.getUsername());
    						childId++;
    					}
    -------------------->
    Code:
    					if (others != null) {
    						ClanChatRank rank = clan.getRank(others);
    						int image = -1;
    						if(rank != null) {
    							image = 841 + rank.ordinal();
    						}
    						String prefix = image >= 0 ? ("<img=" + (image) +  "> ") : "";
    						member.getPacketSender().sendString(childId, prefix + others.getUsername());
    						childId++;
    					}
    Was the only difference I saw.


    "A fail act is something you do regular, but a dumb act is something you can learn from"
    Spoiler for Problem?:
    Reply With Quote  
     

  7. Thankful user:


  8. #7  
    Jake from State Farm

    FKN Jake's Avatar
    Join Date
    Nov 2013
    Posts
    675
    Thanks given
    45
    Thanks received
    58
    Rep Power
    153
    Quote Originally Posted by arch337 View Post
    Code:
    					if (others != null) {
    						ClanChatRank rank = clan.getRank(others);
    
    						int image = -1;
    						if(rank != null) {
    							image = 34 + rank.ordinal();
    						}
    
    						String prefix = image >= 0 ? ("<img=" + (image) +  "> ") : "";
    						member.getPacketSender().sendString(childId, prefix + others.getUsername());
    						childId++;
    					}
    -------------------->
    Code:
    					if (others != null) {
    						ClanChatRank rank = clan.getRank(others);
    						int image = -1;
    						if(rank != null) {
    							image = 841 + rank.ordinal();
    						}
    						String prefix = image >= 0 ? ("<img=" + (image) +  "> ") : "";
    						member.getPacketSender().sendString(childId, prefix + others.getUsername());
    						childId++;
    					}
    Was the only difference I saw.
    Yeah that's just the image draw difference
    Reply With Quote  
     

  9. #8  
    Community Veteran


    Arch337's Avatar
    Join Date
    Sep 2008
    Posts
    2,950
    Thanks given
    210
    Thanks received
    349
    Rep Power
    1376
    Quote Originally Posted by Yalu View Post
    Yeah that's just the image draw difference
    Alright, then the only thing I can think about is something before the check is making your rank, then when it tries to check it, he already got the rank.
    I suggest to debug all methods with addRank to see if it sends more often then it should.
    Since it send this code:
    Code:
    				if(targetRank == rank) {
    					player.getPacketSender().sendMessage("That player already has that rank.");
    					return;
    				}


    "A fail act is something you do regular, but a dumb act is something you can learn from"
    Spoiler for Problem?:
    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. [RUSE] Change Clan Chat Colour
    By SinfulPS in forum Snippets
    Replies: 0
    Last Post: 03-20-2017, 06:54 PM
  2. Ruse Auto Join Clan Chat Upon Login
    By ProudExplosion in forum Help
    Replies: 9
    Last Post: 03-14-2016, 01:44 AM
  3. Fully working clan chat!
    By Jonas++ in forum RS2 Server
    Replies: 38
    Last Post: 04-17-2008, 12:43 AM
  4. Real Clan Chat
    By Scu11 in forum RS2 Server
    Replies: 8
    Last Post: 03-28-2008, 11:08 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
  •