PDA

View Full Version : [508] ClanChat (Gravediggah)



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!

jamie
June 19th, 2010, 05:22
Some sources have this. Its great and nice. And easier to communicate on 508. thanks for the huge share.

Nathan'
June 19th, 2010, 05:36
Guys chillax, at least he made the effort to post work here >;@

aksl8
June 27th, 2010, 08:45
hmmmmmm looks like breaks unbanned and nice but not gonna make anything before i got ma serva client

arcen
June 11th, 2011, 03:24
.\palidino76\rs2\util\Misc.java:24: cannot find symbol
symbol : class player
location: class palidino76.rs2.util.Misc
public static player player(String name) {
^
.\palidino76\rs2\util\Misc.java:25: cannot find symbol
symbol : class player
location: class palidino76.rs2.util.Misc
for (player p : engine.players) {
^
.\palidino76\rs2\util\Misc.java:25: cannot find symbol
symbol : variable engine
location: class palidino76.rs2.util.Misc
for (player p : engine.players) {
^
3 errors
Press any key to continue . . .


This is in misc.java

Tricky
June 11th, 2011, 09:10
Thanks For This Fabb, This Will Be Going Into My Server :D. Thanks Again!