Faab234
June 18th, 2010, 11:38
ClanChat for your Server :cool:, No Credits to me.
Author:
Gravediggah
Tested base:
Palidino
Credits:
-Me
NOTE: This should work instantly, let me know if I forgot something.
Use /message to send a message to your ClanChat room.
Click Join Chat to join a chatroom. (Clan Tab)
Click Leave Chat to leave a chatroom. (Clan Tab)
Click Clan Setup to set ranks. (Clan Tab)
Step 1. Open up PacketManager.java
Add these 2 cases.
case 111:
int rank = p.stream.readUnsignedByte();
long cpName = p.stream.readBigQWord();
String rankPlayer = Misc.longToString(cpName).replaceAll("_", " ");
Engine.clanChat.setRank(p, rankPlayer, rank);
break;
case 42:
long chatName = p.stream.readQWord();
if (p.clanRoom.length() > 0) {
Engine.clanChat.leave(p);
} else {
Engine.clanChat.join(p, Misc.longToString(chatName));
}
break;
Step 2. Open up Stream.java
Add these methods:
public int readDWordBigEndian() {
return (inBuffer[inOffset++] & 0xff)
| ((inBuffer[inOffset++] & 0xff) << 1279827400)
| ((inBuffer[inOffset++] & 0xff) << -882770384)
| ((inBuffer[inOffset++] & 0xff) << 1432242680);
}
public long readBigQWord() {
long l = (long) readDWordBigEndian();
long l1 = (long) readDWordBigEndian();
if(l1<0) {
l1 = l1 & 0xffffffffL;
}
return (l << -41780448) + l1;
}
Step 3. Create a new package called 'palidino76.rs2.clanchat'
Step 4. Create a new class called "ClanChat.java" in this package.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package palidino76.rs2.clanchat;
import java.util.LinkedList;
import palidino76.rs2.players.Player;
import palidino76.rs2.util.Misc;
/**
*
* @author Gravediggah
*/
public class ClanChat {
private LinkedList<Room> clanRooms = new LinkedList<Room>();
public ClanChat() {
}
public void join(Player p, String name) {
if (createRoom(p, name)) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(name)) {
r.join(p);
}
}
}
}
public void joinPlayer(Player p, String name) {
if (Misc.player(name) != null) {
Player o = Misc.player(name);
if (o.clanRoom.length() > 0) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(o.clanRoom)) {
r.join(p);
}
}
}
}
}
public void leave(Player p) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.leave(p);
clear(p);
}
}
}
public void kick(Player p, String name) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.kick(p, name);
}
}
}
public void setRank(Player p, String name, int rank) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.setRank(p, name, rank);
}
}
}
public void sendMessage(Player p, String message) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
if (message.startsWith("kick ")) {
r.kick(p, message.replace("kick ", ""));
} else if (message.startsWith("ban")) {
r.ban(p, message.replace("ban ", ""));
} else if (message.startsWith("unban")) {
r.unban(p, message.replace("unban ", ""));
} else {
r.sendMessage(p, message);
}
}
}
}
public void logout(Player p) {
if (p != null) {
if (p.clanRoom.length() > 0) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.leave(p);
r.updateRoom();
}
}
}
}
}
public boolean createRoom(Player p, String name) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(name)) {
return true;
}
}
clanRooms.add(new Room(name, p.username));
return false;
}
public void clear(Player p) {
p.clanRoom = "";
p.stream.createFrameVarSizeWord(82);
p.stream.writeQWord(Misc.stringToLong("None")); // Chatroom owner
p.stream.writeQWord(Misc.stringToLong("Not in chat")); //Chatroom name
p.stream.writeByte(1);
p.stream.writeByte(0);
p.stream.endFrameVarSize();
}
}
Step 5. Create a new class called "Room.java" in this package.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package palidino76.rs2.clanchat;
import java.util.Enumeration;
import java.util.Hashtable;
import palidino76.rs2.Engine;
import palidino76.rs2.players.Player;
import palidino76.rs2.util.Misc;
/**
*
* @author Gravediggah
*/
public class Room {
private String name;
private String owner;
private static int messageCounter = 1;
private Hashtable users = new Hashtable();
private Hashtable banned = new Hashtable();
public Room(String name, String owner) {
this.name = name;
this.owner = owner;
users.put(owner, 7);
if (Misc.player(owner) != null) {
Misc.player(owner).clanRoom = this.name;
}
this.updateRoom();
}
public void kick(Player p, String player) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (users.containsKey(player)) {
//users.remove(player);
if (Misc.player(player) != null) {
this.leave(Misc.player(player));
Engine.clanChat.clear(Misc.player(player));
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] You have been kicked from this chat.");
} else {
users.remove(player);
}
updateRoom();
}
}
}
}
public void setRank(Player p, String player, int rank) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (users.containsKey(player)) {
//users.remove(player);
if (Misc.player(player) != null) {
if(users.containsKey(player)) {
users.remove(player);
users.put(player, rank);
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] " + Misc.upperFirst(owner) + " changed your rank to '" + rankName(rank) + "'.");
}
} else {
users.remove(player);
}
updateRoom();
}
}
}
}
public String rankName(int rank) {
switch(rank) {
case 0:
return "Not in clan";
case 1:
return "Recruit";
case 2:
return "Corporal";
case 3:
return "Sergeant";
case 4:
return "Lieutenant";
case 5:
return "Captain";
case 6:
return "General";
}
return "None";
}
public void ban(Player p, String player) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (users.containsKey(player)) {
if (Misc.player(player) != null) {
this.leave(Misc.player(player));
Engine.clanChat.clear(Misc.player(player));
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] You have been banned from this chat.");
this.banned.put(player, name);
} else {
users.remove(player);
}
updateRoom();
}
}
}
}
public void unban(Player p, String player) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (banned.containsKey(player)) {
//users.remove(player);
if (Misc.player(player) != null) {
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] You have been unbanned from this chat.");
this.banned.remove(player);
} else {
banned.remove(player);
}
updateRoom();
}
}
}
}
public static int getMessageCounter() {
return messageCounter;
}
public static void setMessageCounter(int messageCounter) {
Room.messageCounter = messageCounter;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public Hashtable getUsers() {
return users;
}
public void setUsers(Hashtable users) {
this.users = users;
}
public void join(Player p) {
if (this.banned.containsKey(p.username)) {
p.frames.sendMessage(p, "[" + Misc.upperFirst(this.name) + "] You have been banned from this chat.");
} else {
if (p.clanRoom.length() == 0) {
if (this.owner.equalsIgnoreCase(p.username)) {
this.users.put(p.username, 7);
} else {
this.users.put(p.username, 1);
}
p.clanRoom = this.name;
updateRoom();
} else {
Engine.clanChat.leave(p);
if (this.owner.equalsIgnoreCase(p.username)) {
this.users.put(p.username, 7);
} else {
this.users.put(p.username, 1);
}
p.clanRoom = this.name;
updateRoom();
}
}
}
public void leave(Player p) {
this.users.remove(p.username);
updateRoom();
}
public void updateRoom() {
updateUsers();
if (users.size() > 0) {
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
String userName = String.valueOf(o);
if (Misc.player(userName) != null) {
update(Misc.player(userName));
}
}
}
}
public void updateUsers() {
if (users.size() > 0) {
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
int userRights = Integer.parseInt(String.valueOf(users.get(o)));
String userName = String.valueOf(o);
if (Misc.player(userName) == null) {
users.remove(userName);
} else if (!Misc.player(userName).clanRoom.equalsIgnoreCase( this.name)) {
users.remove(userName);
}
}
}
}
public void sendMessage(Player p, String message) {
if (users.size() > 0) {
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
String userName = String.valueOf(o);
if (Misc.player(userName) != null) {
this.sendMessage(Misc.player(userName), p.username, message);
}
}
}
}
public void update(Player p) {
if (users.size() > 0) {
//Start packet
p.stream.createFrameVarSizeWord(82);
p.stream.writeQWord(Misc.stringToLong(this.owner)) ; // Chatroom owner
p.stream.writeQWord(Misc.stringToLong(this.name)); //Chatroom name
p.stream.writeByte(1);
p.stream.writeByte(users.size());
//
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
int userRights = Integer.parseInt(String.valueOf(users.get(o)));
String userName = String.valueOf(o);
//Update packet
p.stream.writeQWord(Misc.stringToLong(userName));
p.stream.writeRShort(66); // World ID;
p.stream.writeByte(userRights);
p.stream.writeString("RuneScape 66");
//
}
//End Packet
p.stream.endFrameVarSize();
//
}
}
public void sendMessage(Player p, String from, String message) {
p.stream.createFrameVarSize(229);
p.stream.writeQWord(Misc.stringToLong(from)); // Player Username
p.stream.writeByte(1);
p.stream.writeQWord(Misc.stringToLong(this.name)); //Room name
p.stream.writeRShort(1);
byte[] bytes = new byte[message.length() + 1];
bytes[0] = (byte) message.length();
Misc.encryptPlayerChat(bytes, 0, 1, message.length(), message.getBytes());
p.stream.writeBytes(
new byte[]{
(byte) ((messageCounter << 16) & 0xFF),
(byte) ((messageCounter << 8) & 0xFF),
(byte) (messageCounter & 0xFF)}, 3, 0);
messageCounter++;
if (Misc.player(from) != null) {
p.stream.writeByte(Misc.player(from).rights);
} else {
p.stream.writeByte(0);
}
p.stream.writeBytes(bytes, bytes.length, 0);
p.stream.endFrameVarSize();
}
}
Step 6. Open up PublicChat.java in package palidino76.rs2.io.packets
Update your handlePacket method to make it do the same
as below. Or just c/p paste and overwrite the whole method
with the one below.
public void handlePacket(Player p, int packetId, int packetSize) {
if (p == null || p.stream == null) {
return;
}
int chatTextEffects = p.stream.readUnsignedWord();
int numChars = p.stream.readUnsignedByte();
String chatText = Misc.decryptPlayerChat(p.stream, numChars);
if (chatText.startsWith("/")) {
if (p.clanRoom.length() > 0) {
Engine.clanChat.sendMessage(p, chatText.substring(1));
}
} else {
p.chatTextEffects = chatTextEffects;
p.chatText = chatText;
p.chatTextUpdateReq = true;
p.updateReq = true;
}
}
Step 7. Open up Engine.java
Add this:
public static ClanChat clanChat = new ClanChat();
Also, don't forget the import:
import palidino76.rs2.clanchat.ClanChat;
Step 8. Open up ActionButtons.java
Add this case:
case 589:
if(buttonId == 9) {
p.frames.showInterface(p, 590);
}
break;
Step 9. Open up Player.java
Add this:
public String clanRoom = "";
Add this to your logout part, which should start with:
if (disconnected[0]) {
if (clanRoom.length() > 0) {
Engine.clanChat.leave(this);
}
Step 10. Open up Misc.java
Add these methods:
public static Player player(String name) {
for (Player p : Engine.players) {
if (p != null) {
if (p.username.equalsIgnoreCase(name)) {
return p;
}
}
}
return null;
}
public static String upperFirst(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
Step 11. Compile and run!
Author:
Gravediggah
Tested base:
Palidino
Credits:
-Me
NOTE: This should work instantly, let me know if I forgot something.
Use /message to send a message to your ClanChat room.
Click Join Chat to join a chatroom. (Clan Tab)
Click Leave Chat to leave a chatroom. (Clan Tab)
Click Clan Setup to set ranks. (Clan Tab)
Step 1. Open up PacketManager.java
Add these 2 cases.
case 111:
int rank = p.stream.readUnsignedByte();
long cpName = p.stream.readBigQWord();
String rankPlayer = Misc.longToString(cpName).replaceAll("_", " ");
Engine.clanChat.setRank(p, rankPlayer, rank);
break;
case 42:
long chatName = p.stream.readQWord();
if (p.clanRoom.length() > 0) {
Engine.clanChat.leave(p);
} else {
Engine.clanChat.join(p, Misc.longToString(chatName));
}
break;
Step 2. Open up Stream.java
Add these methods:
public int readDWordBigEndian() {
return (inBuffer[inOffset++] & 0xff)
| ((inBuffer[inOffset++] & 0xff) << 1279827400)
| ((inBuffer[inOffset++] & 0xff) << -882770384)
| ((inBuffer[inOffset++] & 0xff) << 1432242680);
}
public long readBigQWord() {
long l = (long) readDWordBigEndian();
long l1 = (long) readDWordBigEndian();
if(l1<0) {
l1 = l1 & 0xffffffffL;
}
return (l << -41780448) + l1;
}
Step 3. Create a new package called 'palidino76.rs2.clanchat'
Step 4. Create a new class called "ClanChat.java" in this package.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package palidino76.rs2.clanchat;
import java.util.LinkedList;
import palidino76.rs2.players.Player;
import palidino76.rs2.util.Misc;
/**
*
* @author Gravediggah
*/
public class ClanChat {
private LinkedList<Room> clanRooms = new LinkedList<Room>();
public ClanChat() {
}
public void join(Player p, String name) {
if (createRoom(p, name)) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(name)) {
r.join(p);
}
}
}
}
public void joinPlayer(Player p, String name) {
if (Misc.player(name) != null) {
Player o = Misc.player(name);
if (o.clanRoom.length() > 0) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(o.clanRoom)) {
r.join(p);
}
}
}
}
}
public void leave(Player p) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.leave(p);
clear(p);
}
}
}
public void kick(Player p, String name) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.kick(p, name);
}
}
}
public void setRank(Player p, String name, int rank) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.setRank(p, name, rank);
}
}
}
public void sendMessage(Player p, String message) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
if (message.startsWith("kick ")) {
r.kick(p, message.replace("kick ", ""));
} else if (message.startsWith("ban")) {
r.ban(p, message.replace("ban ", ""));
} else if (message.startsWith("unban")) {
r.unban(p, message.replace("unban ", ""));
} else {
r.sendMessage(p, message);
}
}
}
}
public void logout(Player p) {
if (p != null) {
if (p.clanRoom.length() > 0) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(p.clanRoom)) {
r.leave(p);
r.updateRoom();
}
}
}
}
}
public boolean createRoom(Player p, String name) {
for (Room r : clanRooms) {
if (r.getName().equalsIgnoreCase(name)) {
return true;
}
}
clanRooms.add(new Room(name, p.username));
return false;
}
public void clear(Player p) {
p.clanRoom = "";
p.stream.createFrameVarSizeWord(82);
p.stream.writeQWord(Misc.stringToLong("None")); // Chatroom owner
p.stream.writeQWord(Misc.stringToLong("Not in chat")); //Chatroom name
p.stream.writeByte(1);
p.stream.writeByte(0);
p.stream.endFrameVarSize();
}
}
Step 5. Create a new class called "Room.java" in this package.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package palidino76.rs2.clanchat;
import java.util.Enumeration;
import java.util.Hashtable;
import palidino76.rs2.Engine;
import palidino76.rs2.players.Player;
import palidino76.rs2.util.Misc;
/**
*
* @author Gravediggah
*/
public class Room {
private String name;
private String owner;
private static int messageCounter = 1;
private Hashtable users = new Hashtable();
private Hashtable banned = new Hashtable();
public Room(String name, String owner) {
this.name = name;
this.owner = owner;
users.put(owner, 7);
if (Misc.player(owner) != null) {
Misc.player(owner).clanRoom = this.name;
}
this.updateRoom();
}
public void kick(Player p, String player) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (users.containsKey(player)) {
//users.remove(player);
if (Misc.player(player) != null) {
this.leave(Misc.player(player));
Engine.clanChat.clear(Misc.player(player));
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] You have been kicked from this chat.");
} else {
users.remove(player);
}
updateRoom();
}
}
}
}
public void setRank(Player p, String player, int rank) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (users.containsKey(player)) {
//users.remove(player);
if (Misc.player(player) != null) {
if(users.containsKey(player)) {
users.remove(player);
users.put(player, rank);
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] " + Misc.upperFirst(owner) + " changed your rank to '" + rankName(rank) + "'.");
}
} else {
users.remove(player);
}
updateRoom();
}
}
}
}
public String rankName(int rank) {
switch(rank) {
case 0:
return "Not in clan";
case 1:
return "Recruit";
case 2:
return "Corporal";
case 3:
return "Sergeant";
case 4:
return "Lieutenant";
case 5:
return "Captain";
case 6:
return "General";
}
return "None";
}
public void ban(Player p, String player) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (users.containsKey(player)) {
if (Misc.player(player) != null) {
this.leave(Misc.player(player));
Engine.clanChat.clear(Misc.player(player));
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] You have been banned from this chat.");
this.banned.put(player, name);
} else {
users.remove(player);
}
updateRoom();
}
}
}
}
public void unban(Player p, String player) {
if (p != null) {
if (p.username.equalsIgnoreCase(owner)) {
if (banned.containsKey(player)) {
//users.remove(player);
if (Misc.player(player) != null) {
Misc.player(player).frames.sendMessage(Misc.player (player), "[" + this.name + "] You have been unbanned from this chat.");
this.banned.remove(player);
} else {
banned.remove(player);
}
updateRoom();
}
}
}
}
public static int getMessageCounter() {
return messageCounter;
}
public static void setMessageCounter(int messageCounter) {
Room.messageCounter = messageCounter;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public Hashtable getUsers() {
return users;
}
public void setUsers(Hashtable users) {
this.users = users;
}
public void join(Player p) {
if (this.banned.containsKey(p.username)) {
p.frames.sendMessage(p, "[" + Misc.upperFirst(this.name) + "] You have been banned from this chat.");
} else {
if (p.clanRoom.length() == 0) {
if (this.owner.equalsIgnoreCase(p.username)) {
this.users.put(p.username, 7);
} else {
this.users.put(p.username, 1);
}
p.clanRoom = this.name;
updateRoom();
} else {
Engine.clanChat.leave(p);
if (this.owner.equalsIgnoreCase(p.username)) {
this.users.put(p.username, 7);
} else {
this.users.put(p.username, 1);
}
p.clanRoom = this.name;
updateRoom();
}
}
}
public void leave(Player p) {
this.users.remove(p.username);
updateRoom();
}
public void updateRoom() {
updateUsers();
if (users.size() > 0) {
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
String userName = String.valueOf(o);
if (Misc.player(userName) != null) {
update(Misc.player(userName));
}
}
}
}
public void updateUsers() {
if (users.size() > 0) {
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
int userRights = Integer.parseInt(String.valueOf(users.get(o)));
String userName = String.valueOf(o);
if (Misc.player(userName) == null) {
users.remove(userName);
} else if (!Misc.player(userName).clanRoom.equalsIgnoreCase( this.name)) {
users.remove(userName);
}
}
}
}
public void sendMessage(Player p, String message) {
if (users.size() > 0) {
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
String userName = String.valueOf(o);
if (Misc.player(userName) != null) {
this.sendMessage(Misc.player(userName), p.username, message);
}
}
}
}
public void update(Player p) {
if (users.size() > 0) {
//Start packet
p.stream.createFrameVarSizeWord(82);
p.stream.writeQWord(Misc.stringToLong(this.owner)) ; // Chatroom owner
p.stream.writeQWord(Misc.stringToLong(this.name)); //Chatroom name
p.stream.writeByte(1);
p.stream.writeByte(users.size());
//
Enumeration e = users.keys();
while (e.hasMoreElements()) {
Object o = e.nextElement();
int userRights = Integer.parseInt(String.valueOf(users.get(o)));
String userName = String.valueOf(o);
//Update packet
p.stream.writeQWord(Misc.stringToLong(userName));
p.stream.writeRShort(66); // World ID;
p.stream.writeByte(userRights);
p.stream.writeString("RuneScape 66");
//
}
//End Packet
p.stream.endFrameVarSize();
//
}
}
public void sendMessage(Player p, String from, String message) {
p.stream.createFrameVarSize(229);
p.stream.writeQWord(Misc.stringToLong(from)); // Player Username
p.stream.writeByte(1);
p.stream.writeQWord(Misc.stringToLong(this.name)); //Room name
p.stream.writeRShort(1);
byte[] bytes = new byte[message.length() + 1];
bytes[0] = (byte) message.length();
Misc.encryptPlayerChat(bytes, 0, 1, message.length(), message.getBytes());
p.stream.writeBytes(
new byte[]{
(byte) ((messageCounter << 16) & 0xFF),
(byte) ((messageCounter << 8) & 0xFF),
(byte) (messageCounter & 0xFF)}, 3, 0);
messageCounter++;
if (Misc.player(from) != null) {
p.stream.writeByte(Misc.player(from).rights);
} else {
p.stream.writeByte(0);
}
p.stream.writeBytes(bytes, bytes.length, 0);
p.stream.endFrameVarSize();
}
}
Step 6. Open up PublicChat.java in package palidino76.rs2.io.packets
Update your handlePacket method to make it do the same
as below. Or just c/p paste and overwrite the whole method
with the one below.
public void handlePacket(Player p, int packetId, int packetSize) {
if (p == null || p.stream == null) {
return;
}
int chatTextEffects = p.stream.readUnsignedWord();
int numChars = p.stream.readUnsignedByte();
String chatText = Misc.decryptPlayerChat(p.stream, numChars);
if (chatText.startsWith("/")) {
if (p.clanRoom.length() > 0) {
Engine.clanChat.sendMessage(p, chatText.substring(1));
}
} else {
p.chatTextEffects = chatTextEffects;
p.chatText = chatText;
p.chatTextUpdateReq = true;
p.updateReq = true;
}
}
Step 7. Open up Engine.java
Add this:
public static ClanChat clanChat = new ClanChat();
Also, don't forget the import:
import palidino76.rs2.clanchat.ClanChat;
Step 8. Open up ActionButtons.java
Add this case:
case 589:
if(buttonId == 9) {
p.frames.showInterface(p, 590);
}
break;
Step 9. Open up Player.java
Add this:
public String clanRoom = "";
Add this to your logout part, which should start with:
if (disconnected[0]) {
if (clanRoom.length() > 0) {
Engine.clanChat.leave(this);
}
Step 10. Open up Misc.java
Add these methods:
public static Player player(String name) {
for (Player p : Engine.players) {
if (p != null) {
if (p.username.equalsIgnoreCase(name)) {
return p;
}
}
}
return null;
}
public static String upperFirst(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
Step 11. Compile and run!