Hey guys, well this is it, its the fix for when you join into your clan chat more than once and you talk which crashes and nulls the server without leaving a trace in the servers cmd. This is the fix Thanks guys, and repps appreciated , like all my stuff i wont remove so you dont have to quote.
Reps is appreciated :trollface:
This is the whole clan chat handler class:
Code:
package server.world;
import server.model.players.Client;
import server.util.Misc;
import server.Server;
import java.util.ArrayList;
/**
* @author Sanity
* @author Akeid Fixed Clan Chat nulling
*/
public class ClanChatHandler {
public ClanChatHandler() {
}
public Clan[] clans = new Clan[100];
public void handleClanChat(Client c, String name) {
for (int j = 0; j < clans.length; j++) {
if (clans[j] != null) {
if (clans[j].name.equalsIgnoreCase(name)) {
addToClan(c.playerId, j);
return;
}
}
}
makeClan(c, name);
}
public void makeClan(Client c, String name) {
if (openClan() >= 0) {
if (c.clanId >= 0) {
c.sendMessage("You are already in a clan.");
return;
}
if (validName(name)) {
c.clanId = openClan();
clans[c.clanId] = new Clan (c,name);
addToClan(c.playerId, c.clanId);
} else {
c.sendMessage("A clan with this name already exists.");
}
} else {
c.sendMessage("Your clan chat request could not be completed.");
}
}
public void updateClanChat(int clanId) {
for (int j = 0; j < clans[clanId].members.length; j++) {
if (clans[clanId].members[j] <= 0)
continue;
if (Server.playerHandler.players[clans[clanId].members[j]] != null) {
Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]];
c.getPA().sendFrame126("Talking in: " + clans[clanId].name, 18139);
c.getPA().sendFrame126("Owner: " + clans[clanId].owner, 18140);
int slotToFill = 18144;
for (int i = 0; i < clans[clanId].members.length; i++) {
if (clans[clanId].members[i] > 0){
if (Server.playerHandler.players[clans[clanId].members[i]] != null) {
c.getPA().sendFrame126(Server.playerHandler.players[clans[clanId].members[i]].playerName, slotToFill);
slotToFill++;
}
}
}
for (int k = slotToFill; k < 18244; k++)
c.getPA().sendFrame126("", k);
}
}
}
public int openClan() {
for (int j = 0; j < clans.length; j++) {
if (clans[j] == null || clans[j].owner == "")
return j;
}
return -1;
}
public boolean validName(String name) {
for (int j = 0; j < clans.length; j++) {
if (clans[j] != null) {
if (clans[j].name.equalsIgnoreCase(name))
return false;
}
}
return true;
}
public void addToClan(int playerId, int clanId) {
if (clans[clanId] != null) {
for (int j = 0; j < clans[clanId].members.length; j++) {
if (clans[clanId].members[j] <= 0) {
clans[clanId].members[j] = playerId;
Server.playerHandler.players[playerId].clanId = clanId;
Client c = (Client)Server.playerHandler.players[playerId];
//c.sendMessage("You have joined the clan chat: " + clans[clanId].name);
messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId);
updateClanChat(clanId);
return;
} else {
Client c = (Client)Server.playerHandler.players[playerId];
Server.playerHandler.players[playerId].clanId = clanId;
c.sendMessage("You already have joined a clan!");
return;
}
}
}
}
public void leaveClan(int playerId, int clanId) {
if (clanId < 0) {
Client c = (Client)Server.playerHandler.players[playerId];
c.sendMessage("You are not in a clan.");
return;
}
if (clans[clanId] != null) {
if (Server.playerHandler.players[playerId].playerName.equalsIgnoreCase(clans[clanId].owner)) {
messageToClan("The clan has been deleted by the owner.", clanId);
destructClan(Server.playerHandler.players[playerId].clanId);
return;
}
for (int j = 0; j < clans[clanId].members.length; j++) {
if (clans[clanId].members[j] == playerId) {
clans[clanId].members[j] = -1;
}
}
if (Server.playerHandler.players[playerId] != null) {
Client c = (Client)Server.playerHandler.players[playerId];
Server.playerHandler.players[playerId].clanId = -1;
c.sendMessage("You have left the clan.");
c.getPA().clearClanChat();
}
updateClanChat(clanId);
} else {
Client c = (Client)Server.playerHandler.players[playerId];
Server.playerHandler.players[playerId].clanId = -1;
c.sendMessage("You are not in a clan.");
}
}
public void destructClan(int clanId) {
if (clanId < 0)
return;
for (int j = 0; j < clans[clanId].members.length; j++) {
if (clanId < 0)
continue;
if (clans[clanId].members[j] <= 0)
continue;
if (Server.playerHandler.players[clans[clanId].members[j]] != null) {
Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]];
c.clanId = -1;
c.getPA().clearClanChat();
}
}
clans[clanId].members = new int[50];
clans[clanId].owner = "";
clans[clanId].name = "";
}
public void messageToClan(String message, int clanId) {
if (clanId < 0)
return;
for (int j = 0; j < clans[clanId].members.length; j++) {
if (clans[clanId].members[j] < 0)
continue;
if (Server.playerHandler.players[clans[clanId].members[j]] != null) {
Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]];
c.sendMessage("@[email protected]" + message);
}
}
}
public void playerMessageToClan(int playerId, String message, int clanId) {
if (clanId < 0)
return;
for (int j = 0; j < clans[clanId].members.length; j++) {
if (clans[clanId].members[j] <= 0)
continue;
if (Server.playerHandler.players[clans[clanId].members[j]] != null) {
Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]];
//c.sendMessage("["+Server.playerHandler.players[playerId].playerName+"] - " + message");
//sendClan(String name, String message, String clan, int rights)
c.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights);
}
}
}
public void sendLootShareMessage(int clanId, String message) {
if (clanId >= 0) {
for (int j = 0; j < clans[clanId].members.length; j++) {
if (clans[clanId].members[j] <= 0)
continue;
if (Server.playerHandler.players[clans[clanId].members[j]] != null) {
Client c = (Client)Server.playerHandler.players[clans[clanId].members[j]];
c.sendClan("Lootshare", message, clans[clanId].name, 2);
}
}
}
}
public int[] unallowed = {592, 530, 526, 536, 1333, 995, 1247, 1089, 1047, 1319};
public void handleLootShare(Client c, int item, int amount) {
for(int i = 0; i < unallowed.length; i++) {
if(item == unallowed[i])
return;
}
if(c.getShops().getItemShopValue(item, 1, c.getItems().getItemSlot(item)) > 5000)
sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + ".");
}
}
W00t phr33 sTu0uff pL0x