Thread: Could anyone help?

Page 1 of 2 12 LastLast
Results 1 to 10 of 15
  1. #1 Could anyone help? 
    Banned
    Join Date
    Dec 2013
    Posts
    45
    Thanks given
    2
    Thanks received
    0
    Rep Power
    0
    Screenshot by Lightshot

    This is what error i keep getting after a while on the server

    what will i need to do? to fix this


    2 things have been made red where the error came from
    Clanchathandler.java
    Code:
    package server.world;
    
    import server.model.players.Client;
    import server.util.Misc;
    import server.Server;
    import server.Connection;
    import server.Config;
    
    import java.util.ArrayList;
    
    /**
     * @author Sanity, PJNoMore
     */
    
    public class ClanChatHandler {
    
    	public ClanChatHandler() {
    	
    	}
    	
    	public Clan[] clans = new Clan[100];
    	
    	
    	public void handleClanChat(Client c, String name) {
    		if (c.clanId != -1) {
    			c.sendMessage("You are already in a clan!");
    			return;
    		}
    		for (int j = 0; j < clans.length; j++) {
    			if (clans[j] != null) {
    				if (clans[j].name.equalsIgnoreCase(name)) {
    					if(checkPass(c, j)){
    						addToClan(c.playerId, j);
    						return;
    					} else {
    						c.sendMessage("Incorrect password!");
    						return;
    					}
    				}
    			}
    		}
    		makeClan(c, name);
    	}
    	
    	
    	public void makeClan(Client c, String name) {
    		
    		String pass = null;
    		boolean loot = false;
    		
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				c.clanId = openClan();
    				createClan(c.playerName, name, pass, loot, false);
    				addToClan(c.playerId, c.clanId);
    				Server.pJClans.saveClan(c.playerName, name, pass, loot, false);
    			} else {
    				c.sendMessage("A clan with this name already exists.");
    			}
    		} else {
    			c.sendMessage("Your clan chat request could not be completed.");
    		}
    	}
    	
    	public void mutePlayer(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] <= 0) {
    							clans[c.clanId].mutedMembers[j] = i;
    							c2.sendMessage("You have been muted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public void unmutePlayer(Client c, String name){
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] == i) {
    							clans[c.clanId].mutedMembers[j] = -1;
    							c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public boolean isOwner(Client c) {
    		//String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase();
    		//name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    		if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) {
    			return true;
    		}
    		if (c.playerRights == 7) {
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isInClan(Client c) {
    		for(int i = 0; i < clans.length; i++) {
    			if(clans[i] != null){
    				for(int j = 0; i < clans[i].members.length; j++) {
    					if(clans[i].members[j] == c.playerId){
    						return true;
    					}
    				}
    			}
    		}
    		return false;
    	}
    	
    	public boolean isClanMuted(Client c) {
    		if (c.playerRights == 7) {
    			return false;
    		}
    		for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) {
    			if(clans[c.clanId].members[i] == c.playerId) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) {
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass);
    			}
    		}
    	}
    	
    	public void setClanPassword(Client c, String pass, boolean hasPass) {
    		if(isOwner(c)){
    			clans[c.clanId].password = pass;
    			clans[c.clanId].hasPassword = hasPass;
    			c.sendMessage("Your new clan chat password is: "+pass);
    		} else {
    			c.sendMessage("You do not have the rights to change this clan's password.");
    		}
    	}
    	
    	
    	
    	public void changeOwner(Client c, String name) {
    		if (c.clanId == -1) {
    			c.sendMessage("You are not in a clan!");
    			return;
    		}
    		if (c.playerRights == 7) {
    			clans[c.clanId].owner = name;
    			updateClanChat(c.clanId);
    		}
    	}
    	
    	public void kickPlayerFromClan(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to kick players from this clan chat!");
    			return;
    		}
    		if (c.playerName.equalsIgnoreCase(name)){
    			c.sendMessage("You may not kick yourself from a clan chat!");
    			return;
    		}
    		if (c.clanId < 0) {
    			c.sendMessage("You are not in a clan.");
    			return;		
    		}
    		
    		for (int i = 0; i < Config.MAX_PLAYERS; i++) {
    			if (Server.playerHandler.players[i] != null) {
    				if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    					Client c2 = (Client)Server.playerHandler.players[i];
    					if(c2.playerRights == 7){
    						c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!");
    						c2.sendMessage(c.playerName+" has tried to kick you from his/her clan.");
    						return;
    					}
    					c2.clanId = -1;
    					c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName);
    					c2.getPA().clearClanChat();
    					c.sendMessage("You have kicked "+c2.playerName+" from your clan.");
    					for (int j = 0; j < clans[c.clanId].members.length; j++) {
    						if (clans[c.clanId].members[j] == i) {
    							clans[c.clanId].members[j] = -1;
    						}
    					}
    				}
    			}
    		}
    		updateClanChat(c.clanId);
    	}
    
    	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 boolean checkPass(Client c, int clanId){
    			if(!clans[clanId].hasPassword){
    				return true;
    			}
    			if(c.playerRights == 7) {
    				return true;
    			}
    			if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) {
    				return true;
    			}
    			if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) {
    				return true;
    			}
    		return false;
    	}
    	
    	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);
    String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    messageToClan(name + " has joined the channel.", clanId);					
    						//messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId);
    						updateClanChat(clanId);
    						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] != null) {
    				Client c = (Client)Server.playerHandler.players[playerId];
    				Server.playerHandler.players[playerId].clanId = -1;
    				c.sendMessage("You have left the clan.");
    				c.getPA().clearClanChat();
    				for (int j = 0; j < clans[clanId].members.length; j++) {
    					if (clans[clanId].members[j] == playerId) {
    						clans[clanId].members[j] = -1;
    					}
    				}
    for (int j = 0; j < clans[clanId].members.length; j++) {
    	int playerIdSlot = clans[clanId].members[j];
    
    	if(playerIdSlot > -1) {
    		Client player = (Client)Server.playerHandler.players[playerIdSlot];
    	
    		if(player != null) {
    		String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    			player.sendMessage(name + " has left the clan.");
    		}
    	}
    }
    			}
    			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 = "";
    		clans[clanId].password = null;
    		clans[clanId].hasPassword = false;
    	}
    	
    	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("@bla@" + message);
    			}
    		}	
    	}
    	
    	public void playerMessageToClan(int playerId, String message, int clanId) {
    		if (clanId < 0)
    			return;
    		if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted and are not permitted to speak!");
    			return;
    		}
    		if (isClanMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted in this clan and are not permitted to speak!");
    			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.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights);
    				c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(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 void handleLootShare(Client c, int item, int amount) {
    		//String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		//c.playerName.substring(0, 1).toUpperCase()  + c.playerName.substring(1);
    			sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + ".");	
    	}
    	
    }




    Npchandler.java
    Code:
    package server.model.npcs;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    import server.clip.*;
    import server.clip.region.*;
    import server.content.RiverTroll;
    import server.content.RockGolem;
    import server.content.SpiritTree;
    import server.content.Zombie;
    
    import java.util.ArrayList;
    
    import server.event.CycleEvent;
    import server.event.CycleEventContainer;
    import server.event.CycleEventHandler;
    import server.event.Event;
    import server.event.EventContainer;
    import server.event.EventManager;
    import server.Config;
    import server.Server;
    import server.model.minigames.FightCaves;
    import server.model.players.Client;
    import server.model.players.Player;
    import server.model.players.PlayerHandler;
    import server.util.Misc;
    
    public class NPCHandler {
    	public static int maxNPCs = 10000;
    	public static int maxListedNPCs = 10000;
    	public static int maxNPCDrops = 10000;
    	public static NPC npcs[] = new NPC[maxNPCs];
    	public static NPCList NpcList[] = new NPCList[maxListedNPCs];
    
    	public NPCHandler() {
    		for(int i = 0; i < maxNPCs; i++) {
    			npcs[i] = null;
    		}
    		for(int i = 0; i < maxListedNPCs; i++) {
    			NpcList[i] = null;
    		}
    		loadNPCList("./Data/CFG/npc.cfg");
    		loadAutoSpawn("./Data/CFG/spawn-config.cfg");
    		//System.out.println("NPC Spawns Loaded");
    	}
    	
    	public void multiAttackGfx(int i, int gfx) {
    		if (npcs[i].projectileId < 0)
    			return;
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null) {
    				Client c = (Client)Server.playerHandler.players[j];
    				if (c.heightLevel != npcs[i].heightLevel)
    					continue;
    				if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) {
    					int nX = Server.npcHandler.npcs[i].getX() + offset(i);
    					int nY = Server.npcHandler.npcs[i].getY() + offset(i);
    					int pX = c.getX();
    					int pY = c.getY();
    					int offX = (nY - pY)* -1;
    					int offY = (nX - pX)* -1;
    					c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65);					
    				}
    			}		
    		}
    	}
    	
    	public boolean switchesAttackers(int i) {
    		switch(npcs[i].npcType) {
    		case 6560:
    		case 6222:
    		case 50:
    		case 2551:
    		case 2552:
    		case 2553:
    		case 2559:
    		case 2560:
    		case 2561:
    		case 2563:
    		case 2564:
    		case 2565:
    		case 2892:
    		case 2894:
    		return true;
    		}
    		return false;
    		}
    		
    	public static int[] godwarsBoss = {};
    
    	public static int[] zamGodKC = { 6203, 6206, 6204, 6208, 6210, 6211, 6212,
    			6214, 6218, 49, 82, 83, 84, 94, 92, 75, 78, 912, 6220 };
    	public static int[] saraGodKC = { 6247, 6252, 6250, 6248, 6254, 6255, 6256,
    			6257, 6258, 6259, 96, 97, 111, 125, 913 };
    	public static int[] armaGodKC = { 6222, 6227, 6225, 6223, 6229, 6230, 6231,
    			6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242,
    			6243, 6244, 6245, 6246, 275, 274 };
    	public static int[] bandosGodKC = { 6260, 6265, 6263, 6261, 6271, 6272,
    			6273, 6274, 6275, 6268, 122, 6279, 6280, 6281, 6282, 6283, 6269,
    			6270, 6276, 6277, 6278 };
    	
    	public void appendBandosKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : bandosGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[0] < 4000) {
    						c.godwarsKillCount[0]++;
    						//c.sendMessage("Bandos Killcount: " + c.bandosGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[0],
    								16217);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	
    	public void appendArmadylKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : armaGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[3] < 4000) {
    						c.godwarsKillCount[3]++;
    						//c.sendMessage("Armadyl Killcount: " + c.armaGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[3],
    								16216);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	public void appendSaradominKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : saraGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[2] < 4000) {
    						c.godwarsKillCount[2]++;
    						//c.sendMessage("Saradomin Killcount: " + c.saraGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[2],
    								16218);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	public void appendZamorakKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : zamGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[1] < 4000) {
    						c.godwarsKillCount[1]++;
    						//c.sendMessage("Zamorak Killcount: " + c.zamGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[1],
    								16219);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	public void multiAttackDamage(int i) {
    		int max = getMaxHit(i);
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null) {
    				Client c = (Client)Server.playerHandler.players[j];
    				if (c.isDead || c.heightLevel != npcs[i].heightLevel)
    					continue;
    				if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) {
    					if (npcs[i].attackType == 2) {
    						if (!c.prayerActive[16]) {
    							if (Misc.random(500) + 200 > Misc.random(c.getCombat().mageDef())) {
    								int dam = Misc.random(max);
    								c.dealDamage(dam);
    								c.handleHitMask(dam);							
    							} else {
    								c.dealDamage(0);
    								c.handleHitMask(0);							
    							}
    						} else {
    							c.dealDamage(0);
    							c.handleHitMask(0);
    						}
    					} else if (npcs[i].attackType == 1) {
    						if (!c.prayerActive[17]) {
    							int dam = Misc.random(max);
    							if (Misc.random(500) + 200 > Misc.random(c.getCombat().calculateRangeDefence())) {
    								c.dealDamage(dam);
    								c.handleHitMask(dam);							
    							} else {
    								c.dealDamage(0);
    								c.handleHitMask(0);
    							}
    						} else {
    							c.dealDamage(0);
    							c.handleHitMask(0);							
    						}
    					}
    					if (npcs[i].endGfx > 0) {
    						c.gfx0(npcs[i].endGfx);					
    					}
    				}
    				c.getPA().refreshSkill(3);
    			}		
    		}
    	}
    	
    	private void spawnSecondForm(final int i) {
    		npcs[i].gfx0(1055);
    		EventManager.getSingleton().addEvent(new Event() {
    		public void execute(EventContainer e) {
    
    		spawnNpc2(1160, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300);
    			e.stop();	
    			}
    		}, 15000);
    	}
    	
    	
    	/**
    	* kq respawn first form
    	*/
    	private void spawnFirstForm(final int i) {
    	EventManager.getSingleton().addEvent(new Event() {
    		public void execute(EventContainer e) {
    	
    	spawnNpc2(1158, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300);
    		e.stop();
    		
    			}
    	
    	 	}, 10000);
    	}
    	
    	public int getClosePlayer(int i) {
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null) {
    				if (j == npcs[i].spawnedBy)
    					return j;
    				if (goodDistance(Server.playerHandler.players[j].absX, Server.playerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) {
    					if ((Server.playerHandler.players[j].underAttackBy <= 0 && Server.playerHandler.players[j].underAttackBy2 <= 0) || Server.playerHandler.players[j].inMulti())
    						if (Server.playerHandler.players[j].heightLevel == npcs[i].heightLevel)
    							return j;
    				}
    			}	
    		}
    		return 0;
    	}
    	
    	public int getCloseRandomPlayer(int i) {
    		ArrayList<Integer> players = new ArrayList<Integer>();
    		for (int j = 0; j < PlayerHandler.players.length; j++) {
    			if (PlayerHandler.players[j] != null) {
    				if (goodDistance(PlayerHandler.players[j].absX, PlayerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) {
    					if ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j].inMulti())
    						if (PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) 
    							players.add(j);
    			}
    			}
    		}
    		if (players.size() > 0)
    			return players.get(Misc.random(players.size() -1));
    		else
    			return 0;
    	}
    	
    	public int getCloseRandomPlayer1(int i) {
    		ArrayList<Integer> players = new ArrayList<Integer>();
    		for (int j = 0; j < PlayerHandler.players.length; j++) {
    			if (PlayerHandler.players[j] != null
    					&& (goodDistance(PlayerHandler.players[j].getX(),
    							PlayerHandler.players[j].getY(),
    							npcs[i].getAbsX(), npcs[i].getAbsY(),
    							50 + followDistance(i)) || isFightCaveNpc(i))
    					&& ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j]
    							.inMulti())
    					&& PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) {
    				if (PlayerHandler.players[j].inGodWarsBoss()) {
    					players.add(j);
    				}
    			}
    		}
    		return players.size() > 0 ? players
    				.get(Misc.random(players.size() - 1)) : 0;
    	}
    	
    	public int npcSize(int i) {
    		switch (npcs[i].npcType) {
    	/*	case 50:
    			return 5;*/
    		case 2883:
    		case 2882:
    		case 2881:
    			return 3;
    		}
    		return 0;
    	}
    	
    	public boolean isReallyAggressive(int i) {
    		switch (npcs[i].npcType) {
    		case 6203:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6247:
    		case 6252:
    		case 6250:
    		case 6248:
    		case 6260:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 6223:
    		case 6225:
    		case 6227:
    		case 6222:
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isAggressive(int i) {
    		switch (npcs[i].npcType) {
    		case 119:
    		case 1931:
    		case 1154:
    		case 1155:
    		case 1159:
    		case 1158:
    		case 1160:
    		case 1157:
    			case 195:
    			case 2550:
    			case 2551:
    			case 2552:
    			case 2553:
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2561:
    			case 2562:
    			case 2563:
    			case 2564:
    			case 2565:
    			case 2892:
    			case 2894:
    			case 2881:
    			case 2882:
    			case 2883:
    			case 50:
    			case 941:
    			return true;		
    		}
    		if (npcs[i].inWild() && npcs[i].MaxHP > 0)
    			return true;
    		if (isFightCaveNpc(i))
    			return true;
    		return false;
    	}
    	
    	public boolean isFightCaveNpc(int i) {
    		switch (npcs[i].npcType) {
    			case 2627:
    			case 2630:
    			case 2631:
    			case 2741:
    			case 2743: 
    			case 2745:
    			return true;		
    		}
    		return false;
    	}
    	
    	/**
    	* Summon npc, barrows, etc
    	**/
    	public void spawnNpc(final Client c, int  npcType, int x, int y, int heightLevel, int WalkingType, int HP, int  maxHit, int attack, int defence, boolean attackPlayer, boolean headIcon)  {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 1; i < maxNPCs; i++) {
    			if (npcs[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    		if(slot == -1) {
    			//Misc.println("No Free Slot");
    			return;		// no free slot found
    		}
    		final NPC newNPC = new NPC(slot, npcType);
    		newNPC.absX = x;
    		newNPC.absY = y;
    		newNPC.makeX = x;
    		newNPC.makeY = y;
    		newNPC.heightLevel = heightLevel;
    		newNPC.walkingType = WalkingType;
    		newNPC.HP = HP;
    		newNPC.MaxHP = HP;
    		newNPC.maxHit = maxHit;
    		newNPC.attack = attack;
    		newNPC.defence = defence;
    		newNPC.spawnedBy = c.getId();
    		newNPC.dagColor = getDagColor(npcType);
    		if(headIcon) 
    			c.getPA().drawHeadicon(1, slot, 0, 0);
    		if(attackPlayer) {
    			newNPC.underAttack = true;
    			if(c != null) {
    				if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] != newNPC.npcType) {
    					if(newNPC.npcType == 2025 || newNPC.npcType == 2026 || newNPC.npcType == 2027 || newNPC.npcType == 2028 || newNPC.npcType == 2029 || newNPC.npcType == 2030) {
    						newNPC.forceChat("You dare disturb my rest!");
    					}
    				}
    				int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284};
    				for(int z = 0; z < animatedArmor.length; z++) {
    					if (newNPC.npcType == animatedArmor[z]) {
    						newNPC.forceAnim(4410);
    						newNPC.forceChat("I'M ALIVE!");
    					}
    				}
    				if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] == newNPC.npcType) {
    					newNPC.forceChat("You dare steal from us!");
    				}
    				
    				newNPC.killerId = c.playerId;
    			}
    		}
            for(int[] aSpiritTree : SpiritTree.spiritTree) {
                if(newNPC.npcType == aSpiritTree[2]) {
                    newNPC.forceChat("Leave these woods and never return!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                           // if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.treeSpawned = false;
                           // }
                        }
                    }, 200);
                }
            }
            for(int[] aRockGolem : RockGolem.rockGolem) {
                if(newNPC.npcType == aRockGolem[2]) {
                    newNPC.forceChat("Raarrrgghh! Flee human!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                         //   if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.golemSpawned = false;
                          //  }
                        }
                    }, 200);
                }
            }
            for(int[] aRiverTroll : RiverTroll.riverTroll) {
                if(newNPC.npcType == aRiverTroll[2]) {
                    newNPC.forceChat("Fishies be mine! Leave dem fishies!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                         //   if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.trollSpawned = false;
                           // }
                        }
                    }, 200);
                }
            }
            for(int[] aZombie : Zombie.zombie) {
                if(newNPC.npcType == aZombie[2]) {
                    newNPC.forceChat("Braaaainssss!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                          //  if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.zombieSpawned = false;
                           // }
                        }
                    }, 200);
                }
            }
    		npcs[slot] = newNPC;
    	}
    	
    	public String getDagColor(int npcType) {
    		int dags[] = {
    			1351, 1352, 1356, 1353, 1354, 1355
    		};
    		String colors[] = {
    			"white", "blue", "brown", "red", "orange", "green"
    		};
    		for(int i = 0; i < dags.length; i++) {
    			if(npcType == dags[i]) {
    				return colors[i];
    			}
    		}
    		return "";
    	}
    	
    	public void getDtLastKill(int i) {
    		int dtNpcs[] = {
    			1975, 1914, 1977, 1913
    		};
    		for(int dtNpc : dtNpcs) {
    			if(npcs[i].npcType == dtNpc) {
    				Client p = (Client) Server.playerHandler.players[npcs[i].killedBy];
    				if(p != null) {
    					p.lastDtKill = dtNpc;
    				}
    			}
    		}
    	}
    	
    	public void checkDt(int i) {
    		if(npcs[i] != null) {
    			
    		}
    	}
    	
    	public void checkHfd(int i) {
    		int dags[] = {
    			1351, 1352, 1356,
    			1353, 1354, 1355
    		};
    		for(int j = 0; j < dags.length; j++) {
    			if(npcs[i].npcType == dags[j]) {
    				Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    				if(c != null) {
    					c.horrorFromDeep = 2;
    					c.sendMessage("You have completed Horror from the Deep.");
    					c.getAA2().HFTD();
    					if(c.questPoints == 3) {
    						//c.getShops().addQuestCape();
    					}
    					c.getPA().loadQuests();
    				}
    				if(npcs[i] != null) {
    					npcs[i].absX = 0;
    					npcs[i].absY = 0;
    					npcs[i] = null;
    					break;
    				}
    			}
    		}
    	}
    	
    	public void checkRfd(int i) {
    		if(npcs[i] != null) {
    			int playerId = npcs[i].killedBy;
    			if(Server.playerHandler.players[playerId] != null) {
    				Client c = (Client) Server.playerHandler.players[playerId];
    				if(c.roundNpc == 2 && !c.spawned) {
    					spawnNpc(c, 3494, 1899, 5354, c.heightLevel, 1, 210, 24, 70, 60, true, true);
    					c.spawned = true;
    				} else if(c.roundNpc == 3 && !c.spawned) {
    					spawnNpc(c, 3495, 1899, 5354, c.heightLevel, 1, 240, 15, 70, 60, true, true);
    					c.spawned = true;
    				} else if(c.roundNpc == 4 && !c.spawned) {
    					spawnNpc(c, 3496, 1899, 5354, c.heightLevel, 1, 140, 19, 70, 60, true, true);
    					c.spawned = true;
    				} else if(c.roundNpc == 5) {
    					c.getPA().movePlayer(3218, 9621, 0);
    					c.getDH().sendDialogues(30, 608);
    					c.roundNpc = 0;
    					c.questPoints++;
    					if(c.questPoints == 3) {
    						//c.getShops().addQuestCape();
    					}
    					c.getPA().loadQuests();
    				}
    			}
    		}
    	}	
    	
    	public void spawnNpc2(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 1; i < maxNPCs; i++) {
    			if (npcs[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    		if(slot == -1) {
    			//Misc.println("No Free Slot");
    			return;		// no free slot found
    		}
    		NPC newNPC = new NPC(slot, npcType);
    		newNPC.absX = x;
    		newNPC.absY = y;
    		newNPC.makeX = x;
    		newNPC.makeY = y;
    		newNPC.heightLevel = heightLevel;
    		newNPC.walkingType = WalkingType;
    		newNPC.HP = HP;
    		newNPC.MaxHP = HP;
    		newNPC.maxHit = maxHit;
    		newNPC.attack = attack;
    		newNPC.defence = defence;
    		npcs[slot] = newNPC;
    	}
    	
    	
    	
    	/**
    	* Emotes
    	**/
    	
    public static int getAttackEmote(int i) {
    		switch(Server.npcHandler.npcs[i].npcType) {	
            case 1158: //kalphite queen
            	if (npcs[i].attackType == 2)
            	return 6240;
            	if (npcs[i].attackType == 0)
            	return 6241;
            		else
            		return 6240;
            case 1160: //kalphite queen form 2
            	if (npcs[i].attackType == 2)
            	return 6237;
            	if (npcs[i].attackType == 0)
            	return 6235;
            		else
            		return 6237;
    		case 6213:
    		case 6212: return 6547;
    		case 6219:
    		case 6254:
    		case 6255:
    		case 6256:
    		case 6257:
    		case 6258:
    		case 6214: return 806;
    		case 6216: return 1582;
    		case 6218: return 4300;
    		case 6221: return 811;
    		case 1643:
    			return 421;
    		case 90:
    		case 91:
    		case 5359:
    		case 5384:
    		case 92:
    		case 93: //skeleton
    		return 5485;	
    		case 1605:
    			return 1507;
            case 419: //zombie
            case 420:
            case 421:
            case 422:
            case 423:
            case 424:
            return 5568;
    
    case 438:
    case 439:
    case 440:
    case 441:
    case 442: // Tree spirit
    case 443:
        return 94;
    
    case 391:
    case 392:
    case 393:
    case 394:
    case 395://river troll
    case 396:
        return 284;
    
    case 413:
    case 414:
    case 415:
    case 416:
    case 417://rock golem
    case 418:
        return 153;
    		
    		case 6229:
    		case 6230:
    		case 6231:
    		case 6232:
    		case 6233:
    		case 6234:
    		case 6235:
    		case 6236:
    		case 6237:
    		case 6238:
    		case 6239:
    		case 6240:
    		case 6241:
    		case 6242:
    		case 6243:
    		case 6244:
    		case 6245:
    		case 6246:
    			return 6953;
    		case 6210:
    			return 6581;
    		case 6211:
    			return 169;
    		case 6279:
    		case 6280:
    		case 6283:
    			return 6184;
    		case 6276:
    		case 6277:
    			return 4320;
    		case 6275:
    			return 164;
    		case 6282:
    			return 6188;
    		// begin new updates
    		case 112: //moss
    		return 4658;
    		case 103: //ghost
    		return 5540;
    		case 78: //bats
    		return 4915;
    		case 1612: //banshee
    		return 1523;
    		case 2783: //dark beast
    		return 2731;
    		//end
    		case 6248:
    		return 6376;
    		case 6250:
    		return 7018;
    		case 6261:
    		case 6263:
    		case 6265:
    		return 6154;
    		case 6204:
    		case 6206:
    		case 6208:
    		return 6945;
    case 49:
    		return 6579;
    
    case 6247:
    return 6964;
    case 6203:
    return 6945;
    		case 6223:
    		case 6225:
    		case 6227:
    		return 6953;
    		case 6222:
    		return 6976;
    		case 6267:
    		return 359;
    		case 6268:
    		return 2930;
    		case 4291:
    		case 4292:
    		case 6269:
    		return 4652;
    		case 6270:
    		return 4652;
    		case 6271:
    		return 4320;
    		case 6272:
    		return 4320;
    		case 6273:
    		return 4320;
    		case 6274:
    		return 4320;
    			case 1459:
    				return 1402;
    			case 2550:
    				if (npcs[i].attackType == 0)
    					return 7060;
    				else
    					return 7063;	
    					case 86:
    					case 87:
    					return 4933;
    			case 2892:
    			case 2894:
    			return 2868;
    			case 2627:
    			return 2621;
    			case 2630:
    			return 2625;
    			case 2631:
    			return 2633;
    			case 2741:
    			return 2637;
    			case 2746:
    			return 2637;
    			case 2607:
    			return 2611;
    			case 2743://360
    			return 2647;
    			case 6260:
    				if (npcs[i].attackType == 0)
    					return 7060;
    				else
    					return 7063;
    			//end of gwd
    			//arma gwd
    			case 2558:
    			return 3505;
    			case 2560:
    			return 6953;
    			case 2559:
    			return 6952;
    			case 2561:
    			return 6954;
    			//end of arma gwd
    			//sara gwd
    			case 2562:
    			return 6964;
    			case 2563:
    			return 6376;
    			case 2564:
    			return 7018;
    			case 2565:
    			return 7009;
    			//end of sara gwd
    			case 5247:
    			return 5411;
    			case 13: //wizards
    			return 711;
    			
    			case 655:
    			return 5532;
    			
    			case 1624:
    			return 1557;
    			
    			case 1648:
    			return 1590;
    			
    			
    			case 1615: //abby demon
    			return 1537;
    			
    			case 1613: //nech
    			return 1528;
    			
    			case 1610: 
    			case 1611: //garg
    			return 1519;
    			
    			case 1616: //basilisk
    			return 1546;
    			
    			//case 459: //skele
    			//return 260;
    			
    			case 50://drags
    			case 53:
    			case 54:
    			case 55:
    			case 941:
    			case 1590:
    			case 1591:
    			case 1592:
    				if (npcs[i].attackType == 0)
    					return 80;
    				else if (npcs[i].attackType == 2)
    					return 81;
    			case 124: //earth warrior
    			return 390;
    			
    			case 803: //monk
    			return 422;
    			
    			case 52: //baby drag
    			return 25;			
    
    			case 58: //Shadow Spider
                case 59: //Giant Spider
                case 60: //Giant Spider
                case 61: //Spider
                case 62: //Jungle Spider
                case 63: //Deadly Red Spider
                case 64: //Ice Spider
                case 134:
    			return 143;	
    			
    			case 105: //Bear
                case 106:  //Bear
    			return 41;
    			
    			case 412:
    //			case 78:
    			return 30;
    			
    			case 2033: //rat
    			return 138;	
    			
    			case 2031: // bloodworm
    			return 2070;
    			
    			case 101: // goblin
    			return 309;	
    			
    			case 81: // cow
    			return 0x03B;
    			
    			case 21: // hero
    			return 451;	
    			
    			case 41: // chicken
    			return 55;	
    			
    			case 9: // guard
    			case 32: // guard
    			case 20: // paladin
    			return 451;	
    			
    			case 1338: // dagannoth
    			case 1340:
    			case 1342:
    			
    			return 1341;
    		
    			case 19: // white knight
    			return 406;
    			
    			case 110:
    			case 111: // ice giant
    			case 117:
    			return 4652;
    			
    			case 2452:
    			return 1312;
    			
    			case 2889:
    			return 2859;
    			
    			case 118:
    			case 119:
    			return 99;
    			
    			case 82://Lesser Demon
                case 83://Greater Demon
                case 84://Black Demon
                case 1472://jungle demon
    			return 64;
    			
    			case 1267:
    			case 1265:
    			return 1312;
    			
    			case 125: // ice warrior
    			case 178:
    			return 451;
    			
    			case 1153: //Kalphite Worker
                case 1154: //Kalphite Soldier
                case 1155: //Kalphite guardian
                case 1156: //Kalphite worker
                case 1157: //Kalphite guardian
    			return 6241;
    			
    			case 123:
    			case 122:
    			return 164;
    			
    			case 2028: // karil
    			return 2075;
    					
    			case 2025: // ahrim
    			return 729;
    			
    			case 2026: // dharok
    			return 2067;
    			
    			case 2027: // guthan
    			return 2080;
    			
    			case 2029: // torag
    			return 0x814;
    			
    			case 2030: // verac
    			return 2062;
    			
    			case 2881: //supreme
    			return 2855;
    			
    			case 2882: //prime
    			return 2854;
    			
    			case 2883: //rex
    			return 2851;
    			case 5666:
    			int test = Misc.random(2);
    			if(test == 2) {
    			return 5895;
    			} else if(test == 1) {
    			return 5894;
    			} else {
    			return 5896;
    			}
    			
    			case 3200:
    			return 3146;
    			
    			case 2745:
    			if (npcs[i].attackType == 2)
    			return 2656;
    			else if (npcs[i].attackType == 1)
    			return 2652;
    			else if (npcs[i].attackType == 0)
    			return 2655;
    			
    			
    			default:
    			return 0x326;		
    		}
    	}	
    
    
    	
    	
    		public int getDeadEmote(int i) {
    		switch(npcs[i].npcType) {
    		case 1158:
    			spawnSecondForm(i);
    			return 6242;
    		case 1160:
    			spawnFirstForm(i);
    			return 6233;
    		case 90:
    		case 91:
    		case 5359:
    		case 5384:
    		case 92:
    		case 93: //skeleton
    		return 5491;
    	    case 438:
    	    case 439:
    	    case 440:
    	    case 441:
    	    case 442: // Tree spirit
    	    case 443:
    	        return 97;
    		case 110:
    		case 117:
    		return 4653;
    		
    	    case 391:
    	    case 392:
    	    case 393:
    	    case 394:
    	    case 395://river troll
    	    case 396:
    	        return 287;
    	    case 413:
    	    case 414:
    	    case 415:
    	    case 416:
    	    case 417://rock golem
    	    case 418:
    	        return 156;
    	            case 419://zombie
    	            case 420:
    	            case 421:
    	            case 422:
    	            case 423:
    	            case 424:
    	            return 5569;
    		case 6282:
    			return 6182;
    		case 6275:
    			return 167;
    		case 6276:
    		case 6277:
    			return 4321;
    		case 6279:
    		case 6280:
    		case 6283:
    			return 6182;
    		case 6211: return 172;
    		case 6212: return 6537;
    		case 6219:
    		case 6221:
    		case 6254:
    		case 6255:
    		case 6256:
    		case 6257:
    		case 6258:
    		case 6214: return 0x900;
    		case 6216: return 1580;
    		case 6218: return 4302;
    		case 6229:
    		case 6230:
    		case 6231:
    		case 6232:
    		case 6233:
    		case 6234:
    		case 6235:
    		case 6236:
    		case 6237:
    		case 6238:
    		case 6239:
    		case 6240:
    		case 6241:
    		case 6242:
    		case 6243:
    		case 6244:
    		case 6245:
    		case 6246:
    			return 6956;
    		case 6210:
    			return 6576;
    		// begin new updates
    		case 112: //moss
    		return 4659;
    		case 103: //ghost
    		return 5542;
    		case 78: //bats
    		return 4917;
    		//end
    		case 6248:
    		return 6377;
    		case 6250:
    		return 7016;
    		case 6204:
    		case 6206:
    		case 6208:
    		return 6946;
    		case 6261:// Seargent Strongstack
    		case 6263:// Seargent Steelwill
    		case 6265:// Seargent Grimspike
    			return 6156;
    
    		case 6260:// General Graardor
    			return 7062;
    case 6142:
    return 1;
    case 6143:
    return 1;
    case 6144:
    return 1;
    case 6145:
    return 1;
    		case 1265://RockCrab
    return 1314;
    case 914://Battle Mage
    return 196;
    case 3742://Ravager
    case 3743:
    case 3744:
    case 3745:
    case 3746:
    return 3916;
    case 3772://Brawler
    case 3773:
    case 3774:
    case 3775:
    case 3776:
    return 3894;
    		case 49:
    		return 6576;
    		case 1612:// Banshee
    			return 1524;
    
    		case 6222:// Kree'ara
    			return 3503;
    
    		case 6223:// Wingman Skree
    		case 6225:// Flockleader Geerin
    		case 6227:// Flight Kilisa
    			return 6956;
    case 6247:
    return 6965;
    case 6203:
    return 6945;
    
    		case 6267:
    		return 357;
    		case 6268:
    		return 2938;
    		case 6269:
    		case 4291: // Cyclops
    		case 4292: // Ice cyclops
    		case 6270:
    		return 4653;
    		case 6271:
    		case 6272:
    		case 6273:
    		case 6274:
    		return 4321;
    			case 1459:
    			return 1404;
    			//sara gwd
    			case 5247:
    			return 5412;
    			case 2562:
    			return 6965;
    			case 86:
    			case 87:
    			return 4935;
    			case 2563:
    			return 6377;
    			case 2564:
    			return 7016;
    			case 2565:
    			return 7011;
    			case 2550:
    			return 7062;
    			case 2892:
    			case 2894:
    			return 2865;
    			case 2558:
    			return 3503;
    			case 2559:
    			case 2560:
    			case 2561:
    			return 6956;
    			case 2607:
    			return 2607;
    			case 2627:
    			return 2620;
    			case 2630:
    			return 2627;
    			case 2631:
    			return 2630;
    			case 2738:
    			return 2627;
    			case 2741:
    			return 2638;
    			case 2746:
    			return 2638;
    			case 2743:
    			return 2646;
    			case 2745:
    			return 2654;
    			case 6150:
    			case 6151:
    			case 6152:
    			case 6153:
    			return -1;
    			case 5666:
    			return 5898;
    			case 3200:
    			return 3147;
    			case 2035: //spider
    			return 146;
    			case 2033: //rat
    			return 141;
    			case 2031: // bloodvel
    			return 2073;
    			case 101: //goblin
    			return 313;
    			case 81: // cow
    			return 244;
    			case 41: // chicken
    			return 57;
    			case 1338: // dagannoth
    			case 1340:
    			case 1342:
    			return 1342;
    			case 2881:
    			case 2882:
    			case 2883:
    			return 2856;
    			case 111: // ice giant
    			return 131;
    			case 125: // ice warrior
    			return 843;
    			case 751://Zombies!!
    			return 302;
    			case 1626:
                case 1627:
                case 1628:
                case 1629:
                case 1630:
                case 1631:
                case 1632: //turoth!
                return 1597;
    			case 1616: //basilisk
                return 1548;
    			case 1653: //hand
                return 1590;
    			case 82://demons
    			case 83:
    			case 84:
    			return 67;
    			case 1605://abby spec
    			return 1508;
    			case 51://baby drags
    			case 52:
    			case 1589:
    			case 3376:
    			return 28;
    			case 1610:
    			case 1611:
    			return 1520;
    			case 1618:
    			case 1619:
    			return 1553;
    			case 1620:
    			case 1621:
    			return 1563;
    			case 2783:
    			return 2732;
    			case 1615:
    			return 1538;
    			case 1624:
    			return 1558;
    			case 1613:
    			return 1530;
    			case 1633:
    			case 1634:
    			case 1635:
    			case 1636:
    			return 1580;
    			case 1648:
    			case 1649:
    			case 1650:
    			case 1651:
    			case 1652:
    			case 1654:
    			case 1655:
    			case 1656:
    			case 1657:
    			return 1590;
    			case 100:
    			case 102:
    			return 313;
    			case 105:
    			case 106:
    			return 44;
    			case 412:
    //			case 78:
    			return 36;
    			case 122:
    			case 123:
    			return 167;
    			case 58:
    			case 59:
    			case 60:
    			case 61:
    			case 62:
    			case 63:
    			case 64:
    			case 134:
    			return 146;
    			case 1153:
    			case 1154:
    			case 1155:
    			case 1156:
    			case 1157:
    			return 6242;
    //			case 103:
    			case 104:
    			return 5534;
    			case 118:
    			case 119:
    			return 102;
    			case 50://drags
    			return 92;
    			case 53:
    			case 54:
    			case 55:
    			case 941:
    			case 1590:
    			case 1591:
    			case 1592:
    			return 92;
    			default:
    			return 2304;
    		}
    	}
    	
    	/**
    	* Attack delays
    	**/
    	public int getNpcDelay(int i) {
    		switch(npcs[i].npcType) {
    			case 2025:
    			case 2028:
    			return 7;
    			
    			case 2745:
    			return 8;
    			
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2561:
    			case 2550:
    			return 6;
    			//saradomin gw boss
    			case 2562:
    			return 2;
    			
    			case 6260:
    			case 6203:
    			case 6222:
    			case 6247:
    				return 6;
    			
    			default:
    			return 5;
    		}
    	}
    	
    	/**
    	* Hit delays
    	**/
    	public int getHitDelay(int i) {
    		switch(npcs[i].npcType) {
    		case 1158:
    		case 1160:
    			if (npcs[i].attackType == 1 || npcs[i].attackType == 2)
    				return 3;
    			else
    				return 2;
    			case 2881:
    			case 2882:
    			case 3200:
    			case 2892:
    			case 2894:
    			return 3;
    			
    			case 2743:
    			case 2631:
    			case 2558:
    			case 2559:
    			case 2560:
    			return 3;
    			
    			case 2745:
    			if (npcs[i].attackType == 1 || npcs[i].attackType == 2)
    				return 5;
    			else
    				return 2;
    			
    			case 6260:
    				npcs[i].graardor = Misc.random(5);
    				if (npcs[i].graardor == 5) {
    					return 3;
    				}
    				return 2;
    
    			case 6203:
    				npcs[i].tsutsaroth = Misc.random(4);
    				if (npcs[i].tsutsaroth == 4) {
    					return 3;
    				}
    				return 2;
    
    			case 6247:
    				npcs[i].zilyana = Misc.random(6);
    				if (npcs[i].zilyana == 6 || npcs[i].zilyana == 5
    						|| npcs[i].zilyana == 4) {
    					return 6;
    				}
    				return 2;
    			
    			case 946:
    			case 50:
    			case 6208:
    			case 6250:
    			case 6263:
    			case 6223:	
    			case 6222:
    			case 2025:
    			return 2;
    			case 2028:
    			return 3;
    
    			default:
    			return 2;
    		}
    	}
    		
    	/**
    	* Npc respawn time
    	**/
    	public int getRespawnTime(int i) {
    		switch(npcs[i].npcType) {
    		
    		case 6260:
    		case 6247:
    		case 6222:
    		case 6203:
    			return 45;
    		case 1931:
    			return 30;
    			
    		case 1160:
    		case 6142:
    		case 6143:
    		case 6144:
    		case 6145:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6252:
    		case 6250:
    		case 6227:
    		case 6225:
    		case 6223:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 3073:
    		case 5808:
    		case 7772:
    		case 7135:
    		case 13454:
    		case 13451:
    		case 5631:
    		case 13452:
    		case 7643:
    		case 6248:
    		case 1158:
    		return -1;
    		
    			case 50:
    			case 2881:
    			case 2882:
    			case 2883:
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2561:
    			case 2562:
    			case 2563:
    			case 2564:
    			case 2550:
    			case 2551:
    			case 2552:
    			case 2553:
    			return 100;
    			case 6150:
    			case 6151:
    			case 6152:
    			case 6153:
    			return 500;
    			default:
    			return 25;
    		}
    	}
    	
    	
    	
    	
    	public void newNPC(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 1; i < maxNPCs; i++) {
    			if (npcs[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    
    		if(slot == -1) return;		// no free slot found
    
    		NPC newNPC = new NPC(slot, npcType);
    		newNPC.absX = x;
    		newNPC.absY = y;
    		newNPC.makeX = x;
    		newNPC.makeY = y;
    		newNPC.heightLevel = heightLevel;
    		newNPC.walkingType = WalkingType;
    		newNPC.HP = HP;
    		newNPC.MaxHP = HP;
    		newNPC.maxHit = maxHit;
    		newNPC.attack = attack;
    		newNPC.defence = defence;
    		npcs[slot] = newNPC;
    	}
    
    	public void newNPCList(int npcType, String npcName, int combat, int HP) {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 0; i < maxListedNPCs; i++) {
    			if (NpcList[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    
    		if(slot == -1) return;		// no free slot found
    
    		NPCList newNPCList = new NPCList(npcType);
    		newNPCList.npcName = npcName;
    		newNPCList.npcCombat = combat;
    		newNPCList.npcHealth = HP;
    		NpcList[slot] = newNPCList;
    	}
    
    	public void handleClipping(int i) {
    		NPC npc = npcs[i];
    			if(npc.moveX == 1 && npc.moveY == 1) {
    					if((Region.getClipping(npc.absX + 1, npc.absY + 1, npc.heightLevel) & 0x12801e0) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0)
    								npc.moveY = 1;
    							else 
    								npc.moveX = 1; 				
    							}
    					} else if(npc.moveX == -1 && npc.moveY == -1) {
    						if((Region.getClipping(npc.absX - 1, npc.absY - 1, npc.heightLevel) & 0x128010e) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0)
    								npc.moveY = -1;
    							else
    								npc.moveX = -1; 		
    					}
    					} else if(npc.moveX == 1 && npc.moveY == -1) {
    							if((Region.getClipping(npc.absX + 1, npc.absY - 1, npc.heightLevel) & 0x1280183) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0)
    								npc.moveY = -1;
    							else
    								npc.moveX = 1; 
    							}
    					} else if(npc.moveX == -1 && npc.moveY == 1) {
    						if((Region.getClipping(npc.absX - 1, npc.absY + 1, npc.heightLevel) & 0x128013) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0)
    								npc.moveY = 1;
    							else
    								npc.moveX = -1; 
    										}
    					} //Checking Diagonal movement. 
    					
    			if (npc.moveY == -1 ) {
    				if ((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) != 0)
                        npc.moveY = 0;
    			} else if( npc.moveY == 1) {
    				if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) != 0)
    					npc.moveY = 0;
    			} //Checking Y movement.
    			if(npc.moveX == 1) {
    				if((Region.getClipping(npc.absX + 1, npc.absY, npc.heightLevel) & 0x1280180) != 0) 
    					npc.moveX = 0;
    				} else if(npc.moveX == -1) {
    				 if((Region.getClipping(npc.absX - 1, npc.absY, npc.heightLevel) & 0x1280108) != 0)
    					npc.moveX = 0;
    			} //Checking X movement.
    	}	
    
    	
    	
    		public void process() {	
    		for (int i = 0; i < maxNPCs; i++) {
    			if (npcs[i] == null) continue;
    			npcs[i].clearUpdateFlags();
    		}		
                    
    		for (int i = 0; i < maxNPCs; i++) {
    			if (npcs[i] != null) {
    				if (npcs[i].actionTimer > 0) {
    					npcs[i].actionTimer--;
    				}
    
    /*
                                    if(npcs[i].npcType == 945) {
                                            npcs[i].forcedText = "Hello there, you should go to www.sabsabionline.com!";
    		                        npcs[i].forcedChatRequired = true;
    		                        npcs[i].updateRequired = true;
    				}*/
    				
    				if (npcs[i].freezeTimer > 0) {
    					npcs[i].freezeTimer--;
    				}
    				
    				if (npcs[i].hitDelayTimer > 0) {
    					npcs[i].hitDelayTimer--;
    				}
    				
    				if (npcs[i].hitDelayTimer == 1) {
    					npcs[i].hitDelayTimer = 0;
    					applyDamage(i);
    				}
    				
    				if(npcs[i].attackTimer > 0) {
    					npcs[i].attackTimer--;
    				}
    					
    				if(npcs[i].spawnedBy > 0) { // delete summons npc
    					if(Server.playerHandler.players[npcs[i].spawnedBy] == null
    					|| Server.playerHandler.players[npcs[i].spawnedBy].heightLevel != npcs[i].heightLevel	
    					|| Server.playerHandler.players[npcs[i].spawnedBy].respawnTimer > 0 
    					|| !Server.playerHandler.players[npcs[i].spawnedBy].goodDistance(npcs[i].getX(), npcs[i].getY(), Server.playerHandler.players[npcs[i].spawnedBy].getX(), Server.playerHandler.players[npcs[i].spawnedBy].getY(), 20)) {
    							
    						if(Server.playerHandler.players[npcs[i].spawnedBy] != null) {
    							for(int o = 0; o < Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs.length; o++){
    								if(npcs[i].npcType == Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][0]) {
    									if (Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] == 1)
    										Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] = 0;
    								}
    							}
    						}
    						npcs[i] = null;
    					}
    				}
    				if (npcs[i] == null) continue;
    				if (npcs[i].lastX != npcs[i].getX()
    						|| npcs[i].lastY != npcs[i].getY()) {
    					npcs[i].lastX = npcs[i].getX();
    					npcs[i].lastY = npcs[i].getY();
    				}	
    				
    				/**
    				* Attacking player
    				**/
    				if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer(i);
    				} else if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer(i);
    				} else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer1(i);
    					} else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer1(i);
    					}
    				if (System.currentTimeMillis() - npcs[i].lastDamageTaken > 5000)
    					npcs[i].underAttackBy = 0;
    				
    				if((npcs[i].killerId > 0 || npcs[i].underAttack) && !npcs[i].walkingHome && retaliates(npcs[i].npcType)) {
    					if(!npcs[i].isDead) {
    						int p = npcs[i].killerId;
    						if(Server.playerHandler.players[p] != null) {
    							Client c = (Client) Server.playerHandler.players[p];
                                                            followPlayer(i, c.playerId);				
    							if (npcs[i] == null) continue;
    							if(npcs[i].attackTimer == 0) {
    								if(c != null) {
    									attackPlayer(c, i);
    								} else {
    									npcs[i].killerId = 0;
    									npcs[i].underAttack = false;
    									npcs[i].facePlayer(0);
    								}
    							}
    						} else {
    							npcs[i].killerId = 0;
    							npcs[i].underAttack = false;
    							npcs[i].facePlayer(0);
    						}
    					}
    				}
    				
    				
    		
    				/**
    				* Random walking and walking home
    				**/
    				if (npcs[i] == null) continue;
    				if((!npcs[i].underAttack || npcs[i].walkingHome) && npcs[i].randomWalk && !npcs[i].isDead) {
    					npcs[i].facePlayer(0);
    					npcs[i].killerId = 0;	
    					if(npcs[i].spawnedBy == 0) {
    						if((npcs[i].absX > npcs[i].makeX + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absX < npcs[i].makeX - Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY > npcs[i].makeY + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY < npcs[i].makeY - Config.NPC_RANDOM_WALK_DISTANCE)) {
    							npcs[i].walkingHome = true;
    						}
    					}
    
    					if (npcs[i].walkingHome && npcs[i].absX == npcs[i].makeX && npcs[i].absY == npcs[i].makeY) {
    						npcs[i].walkingHome = false;
    					} else if(npcs[i].walkingHome) {
    						npcs[i].moveX = GetMove(npcs[i].absX, npcs[i].makeX);
    			      		npcs[i].moveY = GetMove(npcs[i].absY, npcs[i].makeY);
    						handleClipping(i);
    						npcs[i].getNextNPCMovement(i); 
    						npcs[i].updateRequired = true;
    					}
                        if (npcs[i].walkingType >= 0) {
                            switch(npcs[i].walkingType) {
    
                            case 5:
                                    npcs[i].turnNpc(npcs[i].absX-1, npcs[i].absY);
                                    break;
    
                            case 4:
                                    npcs[i].turnNpc(npcs[i].absX+1, npcs[i].absY);
                                    break;
    
                            case 3:
                                    npcs[i].turnNpc(npcs[i].absX, npcs[i].absY-1);
                                    break;
                            case 2:
                                    npcs[i].turnNpc(npcs[i].absX, npcs[i].absY+1);
                                    break;
    
                            default:
                                    if (npcs[i].walkingType >= 0) {
                                            npcs[i].turnNpc(npcs[i].absX, npcs[i].absY); //makes it when npcs move they dont turn back to one direction
                                    }
                                    break;
                            }
                    }
    					if(npcs[i].walkingType == 1) {
    						if(Misc.random(3)== 1 && !npcs[i].walkingHome) {
    							int MoveX = 0;
    							int MoveY = 0;			
    							int Rnd = Misc.random(9);
    							if (Rnd == 1) {
    								MoveX = 1;
    								MoveY = 1;
    							} else if (Rnd == 2) {
    								MoveX = -1;
    							} else if (Rnd == 3) {
    								MoveY = -1;
    							} else if (Rnd == 4) {
    								MoveX = 1;
    							} else if (Rnd == 5) {
    								MoveY = 1;
    							} else if (Rnd == 6) {
    								MoveX = -1;
    								MoveY = -1;
    							} else if (Rnd == 7) {
    								MoveX = -1;
    								MoveY = 1;
    							} else if (Rnd == 8) {
    								MoveX = 1;
    								MoveY = -1;
    							}
    										
    							if (MoveX == 1) {
    								if (npcs[i].absX + MoveX < npcs[i].makeX + 1) {
    									npcs[i].moveX = MoveX;
    								} else {
    									npcs[i].moveX = 0;
    								}
    							}
    							
    							if (MoveX == -1) {
    								if (npcs[i].absX - MoveX > npcs[i].makeX - 1)  {
    									npcs[i].moveX = MoveX;
    								} else {
    									npcs[i].moveX = 0;
    								}
    							}
    							
    							if(MoveY == 1) {
    								if(npcs[i].absY + MoveY < npcs[i].makeY + 1) {
    									npcs[i].moveY = MoveY;
    								} else {
    									npcs[i].moveY = 0;
    								}
    							}
    							
    							if(MoveY == -1) {
    								if(npcs[i].absY - MoveY > npcs[i].makeY - 1)  {
    									npcs[i].moveY = MoveY;
    								} else {
    									npcs[i].moveY = 0;
    								}
    							}
    								
    
    							int x = (npcs[i].absX + npcs[i].moveX);
    							int y = (npcs[i].absY + npcs[i].moveY);
    							//if (VirtualWorld.I(npcs[i].heightLevel, npcs[i].absX, npcs[i].absY, x, y, 0))
    								handleClipping(i);
    								npcs[i].getNextNPCMovement(i);
    							//else
    							//{
    								//npcs[i].moveX = 0;
    								//npcs[i].moveY = 0;
    							//} 
    							npcs[i].updateRequired = true;
    						}
    					}
    				}
    		
    				
    				if (npcs[i].isDead == true) {
    					if (npcs[i].actionTimer == 0 && npcs[i].applyDead == false && npcs[i].needRespawn == false) {
    						npcs[i].updateRequired = true;
    						npcs[i].facePlayer(0);
    						npcs[i].killedBy = getNpcKillerId(i);
    						npcs[i].animNumber = getDeadEmote(i); // dead emote
    						npcs[i].animUpdateRequired = true;
    						npcs[i].freezeTimer = 0;
    						npcs[i].applyDead = true;
    						killedBarrow(i);
    						npcs[i].actionTimer = 4; // delete time
    						resetPlayersInCombat(i);
    						npcs[i].dagColor = "";
    						getDtLastKill(i);
    					} else if (npcs[i].actionTimer == 0 && npcs[i].applyDead == true &&  npcs[i].needRespawn == false) {						
    						npcs[i].needRespawn = true;
    						npcs[i].actionTimer = getRespawnTime(i); // respawn time
    						dropItems(i); // npc drops items!
    						appendSlayerExperience(i);
    						tzhaarDeathHandler(i);
    						if (npcs[i].npcType == 2745) {
    							handleJadDeath(i);
    						}
    						appendZamorakKC(i);
    						appendBandosKC(i);
    						appendSaradominKC(i);
    						appendArmadylKC(i);
    						appendKillCount(i);
    						//appendJailKc(i);
    						npcs[i].absX = npcs[i].makeX;
    						npcs[i].absY = npcs[i].makeY;				
    						npcs[i].HP = npcs[i].MaxHP;
    						npcs[i].animNumber = 0x328;
    						npcs[i].updateRequired = true;
    						npcs[i].animUpdateRequired = true;
    						if (npcs[i].npcType >= 2440 && npcs[i].npcType <= 2446) {
    							Server.objectManager.removeObject(npcs[i].absX, npcs[i].absY);
    						}
    						if (npcs[i].npcType == 2745) {
    							//handleJadDeath(i);
    						}
    					} else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn == true && npcs[i].npcType != 1158) {					
    						Client player = (Client) Server.playerHandler.players[npcs[i].spawnedBy];
    						if(player != null) {
    							checkDt(i);
    							checkHfd(i);
    							checkRfd(i);
    							npcs[i] = null;				
    					} else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn) {
    						if (npcs[i].spawnedBy > 0) {
    							npcs[i] = null;
    						} else {
    						if (npcs[i].npcType == 6260) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6265, 2868, 5364, 2, 1, 146, 23, 120,
    									120);
    							newNPC(6263, 2870, 5356, 2, 1, 127, 23, 150,
    									90);
    							newNPC(6261, 2873, 5366, 2, 1, 126, 22, 100,
    									110);
    						} else if (npcs[i].npcType == 6222) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss1()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6227, 2828, 5299, 2, 1, 146, 23, 120,
    									120);
    							newNPC(6225, 2838, 5305, 2, 1, 127, 20, 150,
    									90);
    							newNPC(6223, 2835, 5299, 2, 1, 126, 19, 100,
    									110);
    						} else if (npcs[i].npcType == 6203) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss2()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6206, 2921, 5328, 2, 1, 146, 23, 120,
    									120);
    							newNPC(6204, 2928, 5328, 2, 1, 127, 20, 150,
    									90);
    							newNPC(6208, 2932, 5321, 2, 1, 126, 19, 100,
    									110);
    						} else if (npcs[i].npcType == 6247) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss3()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6252, 2901, 5261, 0, 1, 146, 23, 120,
    									120);
    							newNPC(6250, 2901, 5269, 0, 1, 127, 20, 150,
    									90);
    							newNPC(6248, 2892, 5268, 0, 1, 126, 19, 100,
    									110);
    						}
    							int old1 = npcs[i].npcType;
    							int old2 = npcs[i].makeX;
    							int old3 = npcs[i].makeY;
    							int old4 = npcs[i].heightLevel;
    							int old5 = npcs[i].walkingType;
    							int old6 = npcs[i].MaxHP;
    							int old7 = npcs[i].maxHit;
    							int old8 = npcs[i].attack;	
    							int old9 = npcs[i].defence;
    							npcs[i] = null;
    							newNPC(old1, old2, old3, old4, old5, old6, old7, old8, old9);
    						}
    					}
    				}
    			}
    		}
    		}
    		}
    		
    		
    	public boolean getsPulled(int i) {
    		switch (npcs[i].npcType) {
    			case 6560:
    				if (npcs[i].firstAttacker > 0)
    					return false;
    			break;
    		}
    		return true;
    	}
    	   
    	public boolean multiAttacks(int i) {
    		switch (npcs[i].npcType) {
    		 case 1158: //kq
    				if (npcs[i].attackType == 2)
    				return true;
    			case 1160: //kq
    				if (npcs[i].attackType == 1)
    				return true;
    			case 2558:
    			return true;
    			case 2562:
    			if (npcs[i].attackType == 2)
    				return true;
    			case 2550:
    			if (npcs[i].attackType == 1)
    				return true;
    			default:
    			return false;
    		}
    	
    	
    	}
    	
    	/**
    	* Npc killer id?
    	**/
    	
    	public int getNpcKillerId(int npcId) {
    		int oldDamage = 0;
    		int count = 0;
    		int killerId = 0;
    		for (int p = 1; p < Config.MAX_PLAYERS; p++)  {	
    			if (Server.playerHandler.players[p] != null) {
    				if(Server.playerHandler.players[p].lastNpcAttacked == npcId) {
    					if(Server.playerHandler.players[p].totalDamageDealt > oldDamage) {
    						oldDamage = Server.playerHandler.players[p].totalDamageDealt;
    						killerId = p;
    					}
    					Server.playerHandler.players[p].totalDamageDealt = 0;
    				}	
    			}
    		}				
    		return killerId;
    	}
    		
    	/**
    	 * 
    	 */
    	private void killedBarrow(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			for(int o = 0; o < c.barrowsNpcs.length; o++){
    				if(npcs[i].npcType == c.barrowsNpcs[o][0]) {
    					c.barrowsNpcs[o][1] = 2; // 2 for dead
    					c.barrowsKillCount++;
    				}
    			}
    		}
    	}
    	
    	private void tzhaarDeathHandler(int i) {
    		if (isFightCaveNpc(i) && npcs[i].npcType != FightCaves.TZ_KEK)
    			killedTzhaar(i);
    		if(npcs[i].npcType == FightCaves.TZ_KEK_SPAWN) {
    			int p = npcs[i].killerId;
    			if (PlayerHandler.players[p] != null) {
    				Client c = (Client) PlayerHandler.players[p];
    				c.tzKekSpawn += 1;
    				if(c.tzKekSpawn == 2) {
    					killedTzhaar(i);
    					c.tzKekSpawn = 0;
    				}
    			}
    		}
    		
    		if(npcs[i].npcType == FightCaves.TZ_KEK) {
    			int p = npcs[i].killerId;
    			if (PlayerHandler.players[p] != null) {
    				Client c = (Client) PlayerHandler.players[p];
    				FightCaves.tzKekEffect(c, i);
    			}
    		}
    	}
    	
    	private void killedTzhaar(int i) {
    		final Client c2 = (Client) PlayerHandler.players[npcs[i].spawnedBy];
    			c2.tzhaarKilled++;
    		if (c2.tzhaarKilled == c2.tzhaarToKill) {
    			c2.waveId++;
    			EventManager.getSingleton().addEvent(new Event() {
    				public void execute(EventContainer c) {
    					if (c2 != null) {
    						Server.fightCaves.spawnNextWave(c2);
    					}
    					c.stop();
    				}
    			}, 7500);
    
    		}
    	}	
    	public void handleJadDeath(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    		c.getItems().addItem(6570,1);
    		c.getDH().sendDialogues(69, 2617);
    		c.getPA().resetTzhaar();
    		c.waveId = 300;
    	}
    	
    	
    	/**
    	* Dropping Items!
    	**/
    	
    
    	public void dropItems(int i) {
    		int npc = 0;
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			if (npcs[i].npcType == 912 || npcs[i].npcType == 913 || npcs[i].npcType == 914)
    				c.magePoints += 1;
    			if(npcs[i].npcType == 4292 || npcs[i].npcType == 4291 && c.inCyclops) {
    				int random2 = Misc.random(4);
    				if(random2 == 1) {
    					Server.itemHandler.createGroundItem(c, Server.getWarriorsGuild().getCyclopsDrop(c), npcs[i].absX, npcs[i].absY, 1, c.playerId);
    				}
    			}
    			int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284};
    			int[] tokens = {10, 20, 30, 40, 50, 60, 70};
    			for(int f = 0; f < animatedArmor.length; f++) {
    				if (npcs[i].npcType == animatedArmor[f]) {
    					c.spawned = false;
    					Server.itemHandler.createGroundItem(c, 8851, npcs[i].absX, npcs[i].absY, tokens[f], c.playerId);
    				}
    			}
    			
    			for(npc = 0; npc < Config.NPC_DROPS.length; npc++){
    				if(npcs[i].npcType == Config.NPC_DROPS[npc][0]) {
    					if(Misc.random(Config.NPC_DROPS[npc][3]) == 0) {
    						if (c.clanId >= 0)
    							Server.clanChat.handleLootShare(c, Config.NPC_DROPS[npc][1], Config.NPC_DROPS[npc][2]);
    						Server.itemHandler.createGroundItem(c, Config.NPC_DROPS[npc][1], npcs[i].absX, npcs[i].absY, Config.NPC_DROPS[npc][2], c.playerId);
    					}
    				}
    			}
    		}
    	}
    	
    	public void appendKillCount(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			int[] kcMonsters = {};
    			for (int j : kcMonsters) {
    				if (npcs[i].npcType == j) {
    					if (c.killCount < 20) {
    						c.killCount++;
    						//c.sendMessage("Killcount: " + c.killCount);
    					} else {
    					//	c.sendMessage("You already have 20 kill count");
    					}
    					break;
    				}
    			}
    		}	
    	}
    	
    	
    	
    	
    	
    	//id of bones dropped by npcs
    	public int boneDrop(int type) {
    		switch (type) {
    			case 1://normal bones
    			case 9:
    			case 100:
    			case 12:
    			case 17:
    			case 803:
    			case 18:
    			case 81:
    			case 101:
    			case 41:
    			case 19:
    			case 90:
    			case 75:
    			case 86:
    			case 78:
    			case 912:
    			case 913:
    			case 914:
    			case 1648:
    			case 1643:
    			case 1618:
    			case 1624:
    			case 181:
    			case 119:
    			case 49:
    			case 26:
    			case 1341:
    			case 201:
    			return 526;
    			case 117:
    			return 532;//big bones
    			case 50://drags
    			case 53:
    			case 54:
    			case 55:
    			case 941:
    			case 1590:
    			case 1591:
    			case 1592:
    			return 536;
    			case 84:
    			case 1615:
    			case 1613:
    			case 82:
    			case 3200:
    			return 592;
    			case 2881:
    			case 2882:
    			case 2883:
    			return 6729;
    			default:
    			return -1;
    		}	
    	}
    
    	public int getStackedDropAmount(int itemId, int npcId) {
    		switch (itemId) {
    			case 995:
    				switch (npcId) {
    					case 1:
    					return 50+ Misc.random(50);
    					case 9:
    					return 133 + Misc.random(100);
    					case 1624:
    					return 1000 + Misc.random(300);
    					case 1618:
    					return 1000 + Misc.random(300);
    					case 1643:
    					return 1000 + Misc.random(300);
    					case 1610:
    					return 1000 + Misc.random(1000);
    					case 1613:
    					return 1500 + Misc.random(1250);
    					case 1615:
    					return 3000;
    					case 18:
    					return 500;
    					case 101:
    					return 60;
    					case 913:
    					case 912:
    					case 914:
    					return 750 + Misc.random(500);
    					case 1612:
    					return 250 + Misc.random(500);
    					case 1648:
    					return 250 + Misc.random(250);
    					case 90:
    					return 200;
    					case 82:
    					return 1000 + Misc.random(455);
    					case 52:
    					return 400 + Misc.random(200);
    					case 49:
    					return 1500 + Misc.random(2000);
    					case 1341:
    					return 1500 + Misc.random(500);
    					case 26:
    					return 500 + Misc.random(100);
    					case 20:
    					return 750 + Misc.random(100);
    					case 21: 
    					return 890 + Misc.random(125);
    					case 117:
    					return 500 + Misc.random(250);
    					case 2607:
    					return 500 + Misc.random(350);
    				}			
    			break;
    			case 11212:
    			return 10 + Misc.random(4);
    			case 565:
    			case 561:
    			return 10;
    			case 560:
    			case 563:
    			case 562:
    			return 15;
    			case 555:
    			case 554:
    			case 556:
    			case 557:
    			return 20;
    			case 892:
    			return 40;
    			case 886:
    			return 100;
    			case 6522:
    			return 6 + Misc.random(5);
    			
    		}
    	
    		return 1;
    	}
    	
        /**
         * Slayer Experience
         **/
        public void appendSlayerExperience(int i) {
            int npc = 0;
            Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
            if (c != null) {
                if (c.getSlayer().isSlayerTask(npcs[i].npcType)) {
                    c.taskAmount--;
                    c.getPA().addSkillXP(npcs[i].MaxHP * Config.SLAYER_EXPERIENCE,
                            18);
                    if (c.taskAmount <= 0) {
                        c.getPA().addSkillXP(
                                (npcs[i].MaxHP * 8) * Config.SLAYER_EXPERIENCE, 18);
                        int points = c.getSlayer().getDifficulty(c.slayerTask) * 4;
                        c.slayerTask = -1;
                        c.slayerPoints += points;
                        c.sendMessage("You completed your slayer task. You obtain "
                                + points
                                + " slayer points. Please talk to Vanakka.");
                    }
                }
            }
        }
    	
    	/**
    	 *	Resets players in combat
    	 */
    	
    	public void resetPlayersInCombat(int i) {
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null)
    				if (Server.playerHandler.players[j].underAttackBy2 == i)
    					Server.playerHandler.players[j].underAttackBy2 = 0;
    		}
    	}
    	
    	/**
    	* Npc names
    	**/
    	
    	public String getNpcName(int npcId) {
    		for (int i = 0; i < maxNPCs; i++) {
    			if (Server.npcHandler.NpcList[i] != null) {
    				if (Server.npcHandler.NpcList[i].npcId == npcId) {
    					return Server.npcHandler.NpcList[i].npcName;
    				}
    			}
    		}
    		return "-1";
    	}
    	
    	/**
    	* Npc Follow Player
    	**/
    	
    	public int GetMove(int Place1,int Place2) { 
    		if ((Place1 - Place2) == 0) {
                return 0;
    		} else if ((Place1 - Place2) < 0) {
    			return 1;
    		} else if ((Place1 - Place2) > 0) {
    			return -1;
    		}
            	return 0;
       	 }
    	
    	public boolean followPlayer(int i) {
    		switch (npcs[i].npcType) {
    			case 2892:
    			case 2894:
    			return false;
    		}
    		return true;
    	}
    	
    	public void followPlayer(int i, int playerId) {
    		if (Server.playerHandler.players[playerId] == null) {
    			return;
    		}
    		if (Server.playerHandler.players[playerId].respawnTimer > 0) {
    			npcs[i].facePlayer(0);
    			npcs[i].randomWalk = true; 
    	      	npcs[i].underAttack = false;	
    			return;
    		}
    		
    		if (!followPlayer(i)) {
    			npcs[i].facePlayer(playerId);
    			return;
    		}
    		
    		int playerX = Server.playerHandler.players[playerId].absX;
    		int playerY = Server.playerHandler.players[playerId].absY;
    		npcs[i].randomWalk = false;
    		if (goodDistance(npcs[i].getX(), npcs[i].getY(), playerX, playerY, distanceRequired(i)))
    			return;
    		if((npcs[i].spawnedBy > 0) || ((npcs[i].absX < npcs[i].makeX + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absX > npcs[i].makeX - Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY < npcs[i].makeY + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY > npcs[i].makeY - Config.NPC_FOLLOW_DISTANCE))) {
    			if(npcs[i].heightLevel == Server.playerHandler.players[playerId].heightLevel) {
    				if(Server.playerHandler.players[playerId] != null && npcs[i] != null) {
    					if(playerY < npcs[i].absY) {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerY > npcs[i].absY) {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerX < npcs[i].absX) {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerX > npcs[i].absX)  {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerX == npcs[i].absX || playerY == npcs[i].absY) {
    						int o = Misc.random(3);
    						switch(o) {
    							case 0:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY+1);
    							break;
    							
    							case 1:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY-1);
    							break;
    							
    							case 2:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX+1);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    							break;
    							
    							case 3:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX-1);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    							break;
    						}	
    					}
    					int x = (npcs[i].absX + npcs[i].moveX);
    					int y = (npcs[i].absY + npcs[i].moveY);
    					npcs[i].facePlayer(playerId);
    					//if (checkClipping(i))
    						handleClipping(i);
    						npcs[i].getNextNPCMovement(i);
    					/*else {
    						npcs[i].moveX = 0;
    						npcs[i].moveY = 0;
    					}*/
    					npcs[i].facePlayer(playerId);
    			      	npcs[i].updateRequired = true;
    				}	
    			}
    		} else {
    			npcs[i].facePlayer(0);
    			npcs[i].randomWalk = true; 
    		   	npcs[i].underAttack = false;	
    		}
    	}
    	
    	
    	/*public boolean checkClipping(int i) {
    		NPC npc = npcs[i];
    		int size = npcSize(i);
    		
    		for (int x = 0; x < size; x++) {
    			for (int y = 0; y < size; y++) {
    				if (!VirtualWorld.I(npc.heightLevel, npc.absX + x, npc.absY + y, npc.absX + npc.moveX, npc.absY + npc.moveY, 0))
    					return false;				
    			}
    		}
    		return true;
    	}*/
    	
    	/**
    	* load spell
    	**/
    	public void loadSpell2(int i) {
    		npcs[i].attackType = 3;
    		int random = Misc.random(3);
    		if (random == 0) {
    			npcs[i].projectileId = 393; //red
    			npcs[i].endGfx = 430;
    		} else if (random == 1) {
    			npcs[i].projectileId = 394; //green
    			npcs[i].endGfx = 429;
    		} else if (random == 2) {
    			npcs[i].projectileId = 395; //white
    			npcs[i].endGfx = 431;
    		} else if (random == 3) {
    			npcs[i].projectileId = 396; //blue
    			npcs[i].endGfx = 428;
    		}
    	}
    	
    	public void loadSpell(int i) {
    		 Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex];
    		int random;
    		switch(npcs[i].npcType) {
    		
    		case 1158://kq first form
    			int kqRandom = Misc.random(3);
    				if (kqRandom == 0) {
    					npcs[i].projectileId = 280;
    					npcs[i].attackType = 2;	
    					npcs[i].endGfx = 281;
    				} else if (kqRandom == 1) {
    					npcs[i].attackType = 1; // range
    					npcs[i].endGfx = 281;
    					npcs[i].projectileId = 473;
    				} else if (kqRandom == 2) {
    					npcs[i].attackType = 0; // melee
    					npcs[i].projectileId = -1;
    				}
    				break;
    			case 1160://kq secondform
    				int kqRandom2 = Misc.random(3);
    				if (kqRandom2 == 0) {					
    					npcs[i].projectileId = 280; //mage
    					npcs[i].endGfx = 281;
    					npcs[i].attackType = 2;
    				} else if (kqRandom2 == 1) {
    					npcs[i].attackType = 1; // range
    					npcs[i].endGfx = 281;
    					npcs[i].projectileId = 473;
    				} else if (kqRandom2 == 2) {
    					npcs[i].attackType = 0; // melee
    					npcs[i].projectileId = -1;
    				}
    				break;
    				
    	        case 53://Red Dragon
    	        case 54://Black dragon
    	        case 941://Green Dragon
    	        case 55:// Blue Dragon
    	        case 1590://Bronze Dragon
    	        case 1591://Iron Dragon
    	        case 1592:// Steal Dragon
    	        case 5362: //Brutal green
    				if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) {
    					random = Misc.random(2);//If the NPC is in a distance of 2 or less, use melee and range
    					} else {
    					random = (0);//else use range attack only.
    					}
    	        if (random == 0) {
    	            npcs[i].attackType = 2;
    	            npcs[i].projectileId = 393;
    	            npcs[i].endGfx = 430;
    	        } else if (random == 1) {
    				npcs[i].projectileId = -1; //melee
    				npcs[i].endGfx = -1;
    				npcs[i].attackType = 0;	
    	        }            
    	        break;
    				
    			case 6225:
    			case 6230:
    			case 6233:
    			case 6234:
    			case 6235:
    			case 6236:
    			case 6238:
    			case 6241:
    			case 6242:
    			case 6243:
    			case 6244:
    			case 6245:
    			case 2184:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 1190;
    				break;
    				
    			case 6229:
    			case 6232:
    			case 6239:
    			case 6237:
    			case 6240:
    			case 6246:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 35;
    				break;
    
    			case 1605:
    			case 1612:
    				npcs[i].attackType = 2;
    				break;
    				
    			case 6221:
    				npcs[i].attackType = 2;
    				npcs[i].endGfx = 78;
    				break;
    			case 1643:
    			case 6257:
    				npcs[i].attackType = 2;
    				npcs[i].endGfx = 76;
    				break;
    
    			case 6256:
    			case 6220:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 326;
    				break;
    				
    			case 2892:
    			npcs[i].projectileId = 94;
    			npcs[i].attackType = 2;
    			npcs[i].endGfx = 95;
    			break;
    			case 2894:
    			npcs[i].projectileId = 298;
    			npcs[i].attackType = 1;
    			break;
    			case 50:
    				if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) {
    					random = Misc.random(4);//If the NPC is in a distance of 2 or less, use melee and range
    					} else {
    					random = Misc.random(3);//else use range attack only.
    					}
    			if (random == 0) {
    				npcs[i].projectileId = 393; //red
    				npcs[i].endGfx = 430;
    				npcs[i].attackType = 3;
    			} else if (random == 1) {
    				npcs[i].projectileId = 394; //green
    				npcs[i].endGfx = 429;
    				npcs[i].attackType = 3;
    			} else if (random == 2) {
    				npcs[i].projectileId = 395; //white
    				npcs[i].endGfx = 431;
    				npcs[i].attackType = 3;
    			} else if (random == 3) {
    				npcs[i].projectileId = 396; //blue
    				npcs[i].endGfx = 428;
    				npcs[i].attackType = 3;
                    if (c.freezeTimer <= 0) {
                    	c.freezeTimer = 30;
                    	c.frozenBy = c.playerId;
                        c.stopMovement();
                        c.sendMessage("You have been frozen.");
                    }
    			} else if (random == 4) {
    				npcs[i].projectileId = -1; //melee
    				npcs[i].endGfx = -1;
    				npcs[i].attackType = 0;				
    			}			
    			break;
    			case 6222:
    				npcs[i].kree = Misc.random(2);
    				switch (npcs[i].kree) {
    				case 0:
    					npcs[i].attackType = 2;
    					npcs[i].multiAttack = true;
    					npcs[i].projectileId = 1196;
    					break;
    				case 1:
    				case 2:
    					npcs[i].attackType = 1;
    					npcs[i].multiAttack = true;
    					npcs[i].projectileId = 1197;
    					break;
    				}
    				if (Misc.random(5) >= 3) {
    					npcs[i].forceChat(npcs[i].Kree());
    				}
    				break;
    			case 6250:
    				npcs[i].attackType = 2;
    				npcs[i].gfx0(1184);
    				npcs[i].projectileId = 1185;
    				npcs[i].endGfx = 1186;
    				break;
    				
    			case 6203:
    				if (Misc.random(5) >= 3) {
    					npcs[i].forceChat(npcs[i].Tsutsaroth());
    				}
    				switch (npcs[i].tsutsaroth) {
    				case 0:
    				case 1:
    				case 2:
    				case 3:
    					npcs[i].attackType = 0;
    					npcs[i].projectileId = -1;
    					break;
    				case 4:
    					npcs[i].attackType = 2;
    					npcs[i].multiAttack = true;
    					npcs[i].gfx0(1210);
    					npcs[i].projectileId = 1211;
    					break;
    				}
    				break;
    
    			case 6223:
    			case 6231:
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 1199;
    				break;
    				
    			case 6206:
    				npcs[i].attackType = 1;
    				npcs[i].gfx0(1208);
    				npcs[i].projectileId = 1209;
    				break;
    
    			case 6208:
    				npcs[i].attackType = 2;
    				npcs[i].gfx0(1212);
    				npcs[i].projectileId = 1213;
    				break;
    				
    
    			case 6263:
    				npcs[i].attackType = 2;
    				npcs[i].gfx0(1202);
    				npcs[i].projectileId = 1203;
    				npcs[i].endGfx = 1204;
    				break;
    				
    			case 6252:
    				npcs[i].attackType = 1;
    				npcs[i].gfx100(1187);
    				npcs[i].projectileId = 1188;
    				break;
    				
    			case 6265:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 1206;
    				break;
    				
    			case 6260:
    				switch (npcs[i].graardor) {
    				case 0:
    				case 1:
    				case 2:
    				case 3:
    				case 4:
    					if (Misc.random(5) >= 4) {
    						npcs[i].forceChat(npcs[i].Graardor());
    					}
    					npcs[i].attackType = 0;
    					npcs[i].projectileId = -1;
    					break;
    				case 5:
    					if (Misc.random(5) >= 3) {
    						npcs[i].forceChat(npcs[i].Graardor());
    					}
    					npcs[i].attackType = 1;
    					npcs[i].multiAttack = true;
    					npcs[i].gfx0(1219);
    					npcs[i].projectileId = 1200;
    					break;
    				}
    				break;
    
    			case 6247:
    				switch (npcs[i].zilyana) {
    				case 0:
    				case 1:
    				case 2:
    				case 3:
    					npcs[i].attackType = 0;
    					break;
    				case 4:
    				case 5:
    				case 6:
    					npcs[i].attackType = 2;
    					break;
    				}
    				break;
    			case 2551:
    				npcs[i].attackType = 0;
    			break;
    			case 2552:
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 1203;
    			break;
    			case 2553:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 1206;
    			break;
    			case 2025:
    			npcs[i].attackType = 2;
    			int r = Misc.random(3);
    			if(r == 0) {
    				npcs[i].gfx100(158);
    				npcs[i].projectileId = 159;
    				npcs[i].endGfx = 160;
    			}
    			if(r == 1) {
    				npcs[i].gfx100(161);
    				npcs[i].projectileId = 162;
    				npcs[i].endGfx = 163;
    			}
    			if(r == 2) {
    				npcs[i].gfx100(164);
    				npcs[i].projectileId = 165;
    				npcs[i].endGfx = 166;
    			}
    			if(r == 3) {
    				npcs[i].gfx100(155);
    				npcs[i].projectileId = 156;
    			}
    			break;
    			case 2881://supreme
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 298;
    			break;
    			
    			case 2882://prime
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 162;
    				npcs[i].endGfx = 477;
    			break;
    			
    			case 2028:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 27;
    			break;
    			
    			case 3200:
    			int r2 = Misc.random(1);
    			if (r2 == 0) {
    				npcs[i].attackType = 1;
    				npcs[i].gfx100(550);
    				npcs[i].projectileId = 551;
    				npcs[i].endGfx = 552;
    			} else {
    				npcs[i].attackType = 2;
    				npcs[i].gfx100(553);
    				npcs[i].projectileId = 554;
    				npcs[i].endGfx = 555;
    			}
    			break;
    			case 2745:
    			int r3 = 0;
    			if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].spawnedBy].absX, Server.playerHandler.players[npcs[i].spawnedBy].absY, 1))
    				r3 = Misc.random(2);
    			else
    				r3 = Misc.random(1);
    			if (r3 == 0) {
    				npcs[i].attackType = 2;
    				npcs[i].endGfx = 157;
    				npcs[i].projectileId = 448;
    			} else if (r3 == 1) {
    				npcs[i].attackType = 1;
    				npcs[i].endGfx = 451;
    				npcs[i].projectileId = -1;
    			} else if (r3 == 2) {
    				npcs[i].attackType = 0;
    				npcs[i].projectileId = -1;
    			}			
    			break;
    			case 2743:
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 445;
    				npcs[i].endGfx = 446;
    			break;
    			
    			case 2631:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 443;
    			break;
    		}
    	}
    		
    	/**
    	* Distanced required to attack
    	**/	
    	public int distanceRequired(int i) {
    		switch(npcs[i].npcType) {
    		case 6225:
    		case 6223:
    		case 6222:
    		case 1643:
    		case 6221:
    		case 6263:
    		case 6265:
    			return 8;
    			case 2025:
    			case 2028:
    			return 6;
    			case 50:
    				return 8;
    			case 2562:
    			return 2;
    			case 2881://dag kings
    			case 2882:
    			case 3200://chaos ele
    			case 2743:
    			case 2631:
    			case 2745:
    			return 8;
    			case 6261:
    			case 6227:
    			case 2883://rex
    			return 1;
    			case 2552:
    			case 2553:
    			case 2556:
    			case 2557:
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2564:
    			case 2565:
    			return 9;
    			case 1590: // dragons
    			case 1591:
    			case 941:
    			case 48:
    			case 51:
    			case 52:
    			case 53:
    			case 1592:
    				return 3;
    			//things around dags
    			case 2892:
    			case 2894:
    			return 10;
    			default:
    			return 1;
    		}
    	}
    	
    	public int followDistance(int i) {
    		switch (npcs[i].npcType) {
    		case 6203:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6247:
    		case 6252:
    		case 6250:
    		case 6248:
    		case 6829:
    		case 6260:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 6223:
    		case 6225:
    		case 6227:
    		case 6222:
    		case 50:
    			return 20;
    			case 2550:
    			case 2551:
    			case 2562:
    			case 2563:
    			return 8;
    			case 2883:
    			return 4;
    			case 2881:
    			case 2882:
    				return 8;
    			case 941:
    			return 4;
    		
    		}
    		return 0;
    	}
    	
    	public int extraDistance(int i) {
    		switch (npcs[i].npcType) {
    		case 6203:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6247:
    		case 6252:
    		case 6250:
    		case 6248:
    		case 6260:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 6223:
    		case 6225:
    		case 6227:
    		case 6222:
    			return 15;
    		default:
    			return 2;
    		}
    	}
    	
    	public int getProjectileSpeed(int i) {
    		switch(npcs[i].npcType) {
    		case 6222:
    		case 5637:
    			return 135;
    
    		case 6225:
    		case 6223:
    		case 6203:
    		case 2183:
    		case 2188:
    		case 2184:
    		case 6260:
    		case 6230:
    		case 6231:
    		case 6232:
    		case 6233:
    		case 6234:
    		case 6235:
    		case 6236:
    		case 6237:
    		case 6238:
    		case 6239:
    		case 6240:
    		case 6241:
    		case 6242:
    		case 6243:
    		case 6244:
    		case 6245:
    		case 6246:
    			return 120;
    
    		case 6208:
    		case 6265:
    		case 6263:
    		case 6021:
    		case 6006:
    		case 6007:
    		case 6008:
    		case 6017:
    		case 6018:
    		case 6019:
    		case 6020:
    			return 110;
    			case 2881:
    			case 2882:
    			case 3200:
    			return 85;
    			
    			case 2745:
    			return 130;
    			
    			case 50:
    			return 90;
    			
    			case 2025:
    			return 85;
    			
    			case 2028:
    			return 80;
    			
    			default:
    			return 85;
    		}
    	}
    	
    	/**
    	*NPC Attacking Player
    	**/
    	
    	public void attackPlayer(Client c, int i) {
    			if (npcs[i].lastX != npcs[i].getX()
    					|| npcs[i].lastY != npcs[i].getY()) {
    				return;
    			}	
    		if(npcs[i] != null) {
    			if (npcs[i].isDead)
    				return;
    			if (!npcs[i].inMulti() && npcs[i].underAttackBy > 0 && npcs[i].underAttackBy != c.playerId) {
    				npcs[i].killerId = 0;
    				return;
    			}
    			if (!npcs[i].inMulti() && (c.underAttackBy > 0 || (c.underAttackBy2 > 0 && c.underAttackBy2 != i))) {
    				npcs[i].killerId = 0;
    				return;
    			}
    			if (npcs[i].heightLevel != c.heightLevel) {
    				npcs[i].killerId = 0;
    				return;
    			}
    			npcs[i].facePlayer(c.playerId);
    			boolean special = false;//specialCase(c,i);
    			if(goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i)) || special) {
    				if(c.respawnTimer <= 0) {
    					npcs[i].facePlayer(c.playerId);
    					npcs[i].attackTimer = getNpcDelay(i);
    					npcs[i].hitDelayTimer = getHitDelay(i);
    					npcs[i].attackType = 0;
    					if (special)
    						loadSpell2(i);
    					else
    						loadSpell(i);
    					if (npcs[i].attackType == 3)
    						npcs[i].hitDelayTimer += 2;
    					if (multiAttacks(i)) {
    						multiAttackGfx(i, npcs[i].projectileId);
    						startAnimation(getAttackEmote(i), i);
    						npcs[i].oldIndex = c.playerId;
    						return;
    					}
    					if(npcs[i].projectileId > 0) {
    						int nX = Server.npcHandler.npcs[i].getX() + offset(i);
    						int nY = Server.npcHandler.npcs[i].getY() + offset(i);
    						int pX = c.getX();
    						int pY = c.getY();
    						int offX = (nY - pY)* -1;
    						int offY = (nX - pX)* -1;
    						c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65);
    					}
    					c.underAttackBy2 = i;
    					c.singleCombatDelay2 = System.currentTimeMillis();
    					npcs[i].oldIndex = c.playerId;
    					startAnimation(getAttackEmote(i), i);
    					c.getPA().removeAllWindows();
    				} 
    			}			
    		}
    	}
    	
    	public int offset(int i) {
    		switch (npcs[i].npcType) {
    			case 50:
    			return 2;
    			case 2881:
    			case 2882:
    			return 1;
    			case 2745:
    			case 2743:
    			return 1;		
    		}
    		return 0;
    	}
    	
    	public boolean specialCase(Client c, int i) { //responsible for npcs that much 
    		if (goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), 8) && !goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i)))
    			return true;
    		return false;
    	}
    	
    	public boolean retaliates(int npcType) {
    		return npcType < 3777 || npcType > 3780 && !(npcType >= 2440 && npcType <= 2446);
    	}
    	
    	public void applyDamage(int i) {
    		if(npcs[i] != null) {
    			if(Server.playerHandler.players[npcs[i].oldIndex] == null) {
    				return;
    			}
    			if (npcs[i].isDead)
    				return;
    			Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex];
    			if (multiAttacks(i)) {
    				multiAttackDamage(i);
    				return;
    			}
    			if (c.playerIndex <= 0 && c.npcIndex <= 0)
    				if (c.autoRet == 1)
    					c.npcIndex = i;
    			if(c.attackTimer <= 3 || c.attackTimer == 0 && c.npcIndex == 0 && c.oldNpcIndex == 0) {
    				c.startAnimation(c.getCombat().getBlockEmote());
    			}
    			if(c.respawnTimer <= 0) {	
    				int damage = 0;
    				if(npcs[i].attackType == 0) {
    					damage = Misc.random(npcs[i].maxHit);
    					if (10 + Misc.random(c.getCombat().calculateMeleeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) {
    						damage = 0;
    					}					
    					if(c.prayerActive[18]) { 	
    					 if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) 
    					damage = (damage / 2);
    					else
    					damage = 0;		
    					}
    				}
    					if (c.playerLevel[3] - damage < 0) { 
    						damage = c.playerLevel[3];
    					}
    			
    				if(npcs[i].attackType == 1) { // range
    					damage = Misc.random(npcs[i].maxHit);
    					if (10 + Misc.random(c.getCombat().calculateRangeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) {
    						damage = 0;
    					}					
    					if(c.prayerActive[17]) { // protect from range
    						damage = 0;
    					}				
    					if (c.playerLevel[3] - damage < 0) { 
    						damage = c.playerLevel[3];
    					}
    				}
    				
    				if(npcs[i].attackType == 2) { // magic
    					damage = Misc.random(npcs[i].maxHit);
    					boolean magicFailed = false;
    					if (10 + Misc.random(c.getCombat().mageDef()) > Misc.random(Server.npcHandler.npcs[i].attack)) {
    						damage = 0;
    						magicFailed = true;
    					}				
    					if (c.playerLevel[3] - damage < 0) { 
    						damage = c.playerLevel[3];
    					}
    					if(npcs[i].endGfx > 0 && (!magicFailed || isFightCaveNpc(i))) {
    						c.gfx100(npcs[i].endGfx);
    					} else {
    						c.gfx100(85);
    					}
    					if(c.prayerActive[16]) { // protect from magic
    						 if (npcs[i].npcType == 1158) 
    						damage = (damage / 2);
    						else
    						damage = 0;
    						magicFailed = true;	
    					}
    				}
    			
    				if (npcs[i].attackType == 3) { //fire breath
    					int anti = c.getPA().antiFire();
    					if (anti == 0) {
    						damage = Misc.random(30) + 10;
    						c.sendMessage("You are badly burnt by the dragon fire!");
    					} else if (anti == 1)
    						damage = Misc.random(20);
    					else if (anti == 2)
    						damage = Misc.random(5);
    					if (c.playerLevel[3] - damage < 0)
    						damage = c.playerLevel[3];
    					c.gfx100(npcs[i].endGfx);
    				}
    				handleSpecialEffects(c, i, damage);
    				c.logoutDelay = System.currentTimeMillis(); // logout delay
    				//c.setHitDiff(damage);
    				c.handleHitMask(damage);
    				c.playerLevel[3] -= damage;
    				c.getPA().refreshSkill(3);
    				FightCaves.tzKihEffect(c, i, damage);
    				c.updateRequired = true;
    				//c.setHitUpdateRequired(true);	
    			}
    		}
    	}
    	
    	public void handleSpecialEffects(Client c, int i, int damage) {
    		if (npcs[i].npcType == 2892 || npcs[i].npcType == 2894) {
    		 if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) {
    			if (damage > 0) {
    				if (c != null) {
    					if (c.playerLevel[5] > 0) {
    						c.playerLevel[5]--;
    						c.getPA().refreshSkill(5);
    						c.getPA().appendPoison(12);
    					}
    				}			
    			}	
    		}
    		}
    	}
    		
    	public NPC[] getNPCs() {
    		return npcs;
    	}	
    
    	public static void startAnimation(int animId, int i) {
    		npcs[i].animNumber = animId;
    		npcs[i].animUpdateRequired = true;
    		npcs[i].updateRequired = true;
    	}
    	
    	public boolean goodDistance(int objectX, int objectY, int playerX, int playerY, int distance) {
    		return ((objectX-playerX <= distance && objectX-playerX >= -distance) && (objectY-playerY <= distance && objectY-playerY >= -distance));
    	}
    	
          
    	public int getMaxHit(int i) {
    		switch (npcs[i].npcType) {
    		case 1158:
    			if (npcs[i].attackType == 2)
    			return 30;
    			else
    			return 30;
    			case 2558:
    				if (npcs[i].attackType == 2)
    					return 28;
    				else
    					return 68;
    			case 2562:
    				return 31;
    			case 2550:
    				return 36;
    		}
    		return 1;
    	}
    	
    	
    	public boolean loadAutoSpawn(String FileName) {
    		String line = "";
    		String token = "";
    		String token2 = "";
    		String token2_2 = "";
    		String[] token3 = new String[10];
    		boolean EndOfFile = false;
    		int ReadMode = 0;
    		BufferedReader characterfile = null;
    		try {
    			characterfile = new BufferedReader(new FileReader("./"+FileName));
    		} catch(FileNotFoundException fileex) {
    			Misc.println(FileName+": file not found.");
    			return false;
    		}
    		try {
    			line = characterfile.readLine();
    		} catch(IOException ioexception) {
    			Misc.println(FileName+": error loading file.");
    			return false;
    		}
    		while(EndOfFile == false && line != null) {
    			line = line.trim();
    			int spot = line.indexOf("=");
    			if (spot > -1) {
    				token = line.substring(0, spot);
    				token = token.trim();
    				token2 = line.substring(spot + 1);
    				token2 = token2.trim();
    				token2_2 = token2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token3 = token2_2.split("\t");
    				if (token.equals("spawn")) {
    					newNPC(Integer.parseInt(token3[0]), Integer.parseInt(token3[1]), Integer.parseInt(token3[2]), Integer.parseInt(token3[3]), Integer.parseInt(token3[4]), getNpcListHP(Integer.parseInt(token3[0])), Integer.parseInt(token3[5]), Integer.parseInt(token3[6]), Integer.parseInt(token3[7]));
    				
    				}
    			} else {
    				if (line.equals("[ENDOFSPAWNLIST]")) {
    					try { characterfile.close(); } catch(IOException ioexception) { }
    					return true;
    				}
    			}
    			try {
    				line = characterfile.readLine();
    			} catch(IOException ioexception1) { EndOfFile = true; }
    		}
    		try { characterfile.close(); } catch(IOException ioexception) { }
    		return false;
    	}
    
    	public int getNpcListHP(int npcId) {
    		for (int i = 0; i < maxListedNPCs; i++) {
    			if (NpcList[i] != null) {
    				if (NpcList[i].npcId == npcId) {
    					return NpcList[i].npcHealth;
    				}
    			}
    		}
    		return 0;
    	}
    	
    	public String getNpcListName(int npcId) {
    		for (int i = 0; i < maxListedNPCs; i++) {
    			if (NpcList[i] != null) {
    				if (NpcList[i].npcId == npcId) {
    					return NpcList[i].npcName;
    				}
    			}
    		}
    		return "nothing";
    	}
    
    	public boolean loadNPCList(String FileName) {
    		String line = "";
    		String token = "";
    		String token2 = "";
    		String token2_2 = "";
    		String[] token3 = new String[10];
    		boolean EndOfFile = false;
    		int ReadMode = 0;
    		BufferedReader characterfile = null;
    		try {
    			characterfile = new BufferedReader(new FileReader("./"+FileName));
    		} catch(FileNotFoundException fileex) {
    			Misc.println(FileName+": file not found.");
    			return false;
    		}
    		try {
    			line = characterfile.readLine();
    		} catch(IOException ioexception) {
    			Misc.println(FileName+": error loading file.");
    			return false;
    		}
    		while(EndOfFile == false && line != null) {
    			line = line.trim();
    			int spot = line.indexOf("=");
    			if (spot > -1) {
    				token = line.substring(0, spot);
    				token = token.trim();
    				token2 = line.substring(spot + 1);
    				token2 = token2.trim();
    				token2_2 = token2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token3 = token2_2.split("\t");
    				if (token.equals("npc")) {
    					newNPCList(Integer.parseInt(token3[0]), token3[1], Integer.parseInt(token3[2]), Integer.parseInt(token3[3]));
    				}
    			} else {
    				if (line.equals("[ENDOFNPCLIST]")) {
    					try { characterfile.close(); } catch(IOException ioexception) { }
    					return true;
    				}
    			}
    			try {
    				line = characterfile.readLine();
    			} catch(IOException ioexception1) { EndOfFile = true; }
    		}
    		try { characterfile.close(); } catch(IOException ioexception) { }
    		return false;
    	}
    	
    
    }
    Reply With Quote  
     

  2. #2  
    Banned

    Join Date
    Nov 2013
    Posts
    170
    Thanks given
    67
    Thanks received
    33
    Rep Power
    0
    post the goddamn chathandler.java line 389 if you want help....
    Reply With Quote  
     

  3. #3  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    Post your sendlootshare message, aswell the lootshare method you are calling when an npc drops an item
    Reply With Quote  
     

  4. #4  
    Banned
    Join Date
    Dec 2013
    Posts
    45
    Thanks given
    2
    Thanks received
    0
    Rep Power
    0
    Quote Originally Posted by Randy View Post
    post the goddamn chathandler.java line 389 if you want help....
    Code:
    package server.world;
    
    import server.model.players.Client;
    import server.util.Misc;
    import server.Server;
    import server.Connection;
    import server.Config;
    
    import java.util.ArrayList;
    
    /**
     * @author Sanity, PJNoMore
     */
    
    public class ClanChatHandler {
    
    	public ClanChatHandler() {
    	
    	}
    	
    	public Clan[] clans = new Clan[100];
    	
    	
    	public void handleClanChat(Client c, String name) {
    		if (c.clanId != -1) {
    			c.sendMessage("You are already in a clan!");
    			return;
    		}
    		for (int j = 0; j < clans.length; j++) {
    			if (clans[j] != null) {
    				if (clans[j].name.equalsIgnoreCase(name)) {
    					if(checkPass(c, j)){
    						addToClan(c.playerId, j);
    						return;
    					} else {
    						c.sendMessage("Incorrect password!");
    						return;
    					}
    				}
    			}
    		}
    		makeClan(c, name);
    	}
    	
    	
    	public void makeClan(Client c, String name) {
    		
    		String pass = null;
    		boolean loot = false;
    		
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				c.clanId = openClan();
    				createClan(c.playerName, name, pass, loot, false);
    				addToClan(c.playerId, c.clanId);
    				Server.pJClans.saveClan(c.playerName, name, pass, loot, false);
    			} else {
    				c.sendMessage("A clan with this name already exists.");
    			}
    		} else {
    			c.sendMessage("Your clan chat request could not be completed.");
    		}
    	}
    	
    	public void mutePlayer(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] <= 0) {
    							clans[c.clanId].mutedMembers[j] = i;
    							c2.sendMessage("You have been muted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public void unmutePlayer(Client c, String name){
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] == i) {
    							clans[c.clanId].mutedMembers[j] = -1;
    							c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public boolean isOwner(Client c) {
    		//String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase();
    		//name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    		if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) {
    			return true;
    		}
    		if (c.playerRights == 7) {
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isInClan(Client c) {
    		for(int i = 0; i < clans.length; i++) {
    			if(clans[i] != null){
    				for(int j = 0; i < clans[i].members.length; j++) {
    					if(clans[i].members[j] == c.playerId){
    						return true;
    					}
    				}
    			}
    		}
    		return false;
    	}
    	
    	public boolean isClanMuted(Client c) {
    		if (c.playerRights == 7) {
    			return false;
    		}
    		for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) {
    			if(clans[c.clanId].members[i] == c.playerId) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) {
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass);
    			}
    		}
    	}
    	
    	public void setClanPassword(Client c, String pass, boolean hasPass) {
    		if(isOwner(c)){
    			clans[c.clanId].password = pass;
    			clans[c.clanId].hasPassword = hasPass;
    			c.sendMessage("Your new clan chat password is: "+pass);
    		} else {
    			c.sendMessage("You do not have the rights to change this clan's password.");
    		}
    	}
    	
    	
    	
    	public void changeOwner(Client c, String name) {
    		if (c.clanId == -1) {
    			c.sendMessage("You are not in a clan!");
    			return;
    		}
    		if (c.playerRights == 7) {
    			clans[c.clanId].owner = name;
    			updateClanChat(c.clanId);
    		}
    	}
    	
    	public void kickPlayerFromClan(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to kick players from this clan chat!");
    			return;
    		}
    		if (c.playerName.equalsIgnoreCase(name)){
    			c.sendMessage("You may not kick yourself from a clan chat!");
    			return;
    		}
    		if (c.clanId < 0) {
    			c.sendMessage("You are not in a clan.");
    			return;		
    		}
    		
    		for (int i = 0; i < Config.MAX_PLAYERS; i++) {
    			if (Server.playerHandler.players[i] != null) {
    				if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    					Client c2 = (Client)Server.playerHandler.players[i];
    					if(c2.playerRights == 7){
    						c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!");
    						c2.sendMessage(c.playerName+" has tried to kick you from his/her clan.");
    						return;
    					}
    					c2.clanId = -1;
    					c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName);
    					c2.getPA().clearClanChat();
    					c.sendMessage("You have kicked "+c2.playerName+" from your clan.");
    					for (int j = 0; j < clans[c.clanId].members.length; j++) {
    						if (clans[c.clanId].members[j] == i) {
    							clans[c.clanId].members[j] = -1;
    						}
    					}
    				}
    			}
    		}
    		updateClanChat(c.clanId);
    	}
    
    	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 boolean checkPass(Client c, int clanId){
    			if(!clans[clanId].hasPassword){
    				return true;
    			}
    			if(c.playerRights == 7) {
    				return true;
    			}
    			if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) {
    				return true;
    			}
    			if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) {
    				return true;
    			}
    		return false;
    	}
    	
    	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);
    String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    messageToClan(name + " has joined the channel.", clanId);					
    						//messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId);
    						updateClanChat(clanId);
    						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] != null) {
    				Client c = (Client)Server.playerHandler.players[playerId];
    				Server.playerHandler.players[playerId].clanId = -1;
    				c.sendMessage("You have left the clan.");
    				c.getPA().clearClanChat();
    				for (int j = 0; j < clans[clanId].members.length; j++) {
    					if (clans[clanId].members[j] == playerId) {
    						clans[clanId].members[j] = -1;
    					}
    				}
    for (int j = 0; j < clans[clanId].members.length; j++) {
    	int playerIdSlot = clans[clanId].members[j];
    
    	if(playerIdSlot > -1) {
    		Client player = (Client)Server.playerHandler.players[playerIdSlot];
    	
    		if(player != null) {
    		String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    			player.sendMessage(name + " has left the clan.");
    		}
    	}
    }
    			}
    			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 = "";
    		clans[clanId].password = null;
    		clans[clanId].hasPassword = false;
    	}
    	
    	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("@bla@" + message);
    			}
    		}	
    	}
    	
    	public void playerMessageToClan(int playerId, String message, int clanId) {
    		if (clanId < 0)
    			return;
    		if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted and are not permitted to speak!");
    			return;
    		}
    		if (isClanMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted in this clan and are not permitted to speak!");
    			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.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights);
    				c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(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 void handleLootShare(Client c, int item, int amount) {
    		//String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		//c.playerName.substring(0, 1).toUpperCase()  + c.playerName.substring(1);
    			sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + ".");	
    	}
    	
    }
    Reply With Quote  
     

  5. #5  
    Banned

    Join Date
    Nov 2013
    Posts
    170
    Thanks given
    67
    Thanks received
    33
    Rep Power
    0
    Quote Originally Posted by 2012ftw View Post
    Code:
    package server.world;
    
    import server.model.players.Client;
    import server.util.Misc;
    import server.Server;
    import server.Connection;
    import server.Config;
    
    import java.util.ArrayList;
    
    /**
     * @author Sanity, PJNoMore
     */
    
    public class ClanChatHandler {
    
    	public ClanChatHandler() {
    	
    	}
    	
    	public Clan[] clans = new Clan[100];
    	
    	
    	public void handleClanChat(Client c, String name) {
    		if (c.clanId != -1) {
    			c.sendMessage("You are already in a clan!");
    			return;
    		}
    		for (int j = 0; j < clans.length; j++) {
    			if (clans[j] != null) {
    				if (clans[j].name.equalsIgnoreCase(name)) {
    					if(checkPass(c, j)){
    						addToClan(c.playerId, j);
    						return;
    					} else {
    						c.sendMessage("Incorrect password!");
    						return;
    					}
    				}
    			}
    		}
    		makeClan(c, name);
    	}
    	
    	
    	public void makeClan(Client c, String name) {
    		
    		String pass = null;
    		boolean loot = false;
    		
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				c.clanId = openClan();
    				createClan(c.playerName, name, pass, loot, false);
    				addToClan(c.playerId, c.clanId);
    				Server.pJClans.saveClan(c.playerName, name, pass, loot, false);
    			} else {
    				c.sendMessage("A clan with this name already exists.");
    			}
    		} else {
    			c.sendMessage("Your clan chat request could not be completed.");
    		}
    	}
    	
    	public void mutePlayer(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] <= 0) {
    							clans[c.clanId].mutedMembers[j] = i;
    							c2.sendMessage("You have been muted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public void unmutePlayer(Client c, String name){
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] == i) {
    							clans[c.clanId].mutedMembers[j] = -1;
    							c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public boolean isOwner(Client c) {
    		//String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase();
    		//name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    		if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) {
    			return true;
    		}
    		if (c.playerRights == 7) {
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isInClan(Client c) {
    		for(int i = 0; i < clans.length; i++) {
    			if(clans[i] != null){
    				for(int j = 0; i < clans[i].members.length; j++) {
    					if(clans[i].members[j] == c.playerId){
    						return true;
    					}
    				}
    			}
    		}
    		return false;
    	}
    	
    	public boolean isClanMuted(Client c) {
    		if (c.playerRights == 7) {
    			return false;
    		}
    		for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) {
    			if(clans[c.clanId].members[i] == c.playerId) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) {
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass);
    			}
    		}
    	}
    	
    	public void setClanPassword(Client c, String pass, boolean hasPass) {
    		if(isOwner(c)){
    			clans[c.clanId].password = pass;
    			clans[c.clanId].hasPassword = hasPass;
    			c.sendMessage("Your new clan chat password is: "+pass);
    		} else {
    			c.sendMessage("You do not have the rights to change this clan's password.");
    		}
    	}
    	
    	
    	
    	public void changeOwner(Client c, String name) {
    		if (c.clanId == -1) {
    			c.sendMessage("You are not in a clan!");
    			return;
    		}
    		if (c.playerRights == 7) {
    			clans[c.clanId].owner = name;
    			updateClanChat(c.clanId);
    		}
    	}
    	
    	public void kickPlayerFromClan(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to kick players from this clan chat!");
    			return;
    		}
    		if (c.playerName.equalsIgnoreCase(name)){
    			c.sendMessage("You may not kick yourself from a clan chat!");
    			return;
    		}
    		if (c.clanId < 0) {
    			c.sendMessage("You are not in a clan.");
    			return;		
    		}
    		
    		for (int i = 0; i < Config.MAX_PLAYERS; i++) {
    			if (Server.playerHandler.players[i] != null) {
    				if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    					Client c2 = (Client)Server.playerHandler.players[i];
    					if(c2.playerRights == 7){
    						c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!");
    						c2.sendMessage(c.playerName+" has tried to kick you from his/her clan.");
    						return;
    					}
    					c2.clanId = -1;
    					c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName);
    					c2.getPA().clearClanChat();
    					c.sendMessage("You have kicked "+c2.playerName+" from your clan.");
    					for (int j = 0; j < clans[c.clanId].members.length; j++) {
    						if (clans[c.clanId].members[j] == i) {
    							clans[c.clanId].members[j] = -1;
    						}
    					}
    				}
    			}
    		}
    		updateClanChat(c.clanId);
    	}
    
    	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 boolean checkPass(Client c, int clanId){
    			if(!clans[clanId].hasPassword){
    				return true;
    			}
    			if(c.playerRights == 7) {
    				return true;
    			}
    			if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) {
    				return true;
    			}
    			if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) {
    				return true;
    			}
    		return false;
    	}
    	
    	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);
    String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    messageToClan(name + " has joined the channel.", clanId);					
    						//messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId);
    						updateClanChat(clanId);
    						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] != null) {
    				Client c = (Client)Server.playerHandler.players[playerId];
    				Server.playerHandler.players[playerId].clanId = -1;
    				c.sendMessage("You have left the clan.");
    				c.getPA().clearClanChat();
    				for (int j = 0; j < clans[clanId].members.length; j++) {
    					if (clans[clanId].members[j] == playerId) {
    						clans[clanId].members[j] = -1;
    					}
    				}
    for (int j = 0; j < clans[clanId].members.length; j++) {
    	int playerIdSlot = clans[clanId].members[j];
    
    	if(playerIdSlot > -1) {
    		Client player = (Client)Server.playerHandler.players[playerIdSlot];
    	
    		if(player != null) {
    		String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    			player.sendMessage(name + " has left the clan.");
    		}
    	}
    }
    			}
    			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 = "";
    		clans[clanId].password = null;
    		clans[clanId].hasPassword = false;
    	}
    	
    	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("@bla@" + message);
    			}
    		}	
    	}
    	
    	public void playerMessageToClan(int playerId, String message, int clanId) {
    		if (clanId < 0)
    			return;
    		if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted and are not permitted to speak!");
    			return;
    		}
    		if (isClanMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted in this clan and are not permitted to speak!");
    			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.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights);
    				c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(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 void handleLootShare(Client c, int item, int amount) {
    		//String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		//c.playerName.substring(0, 1).toUpperCase()  + c.playerName.substring(1);
    			sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + ".");	
    	}
    	
    }
    now mark the error line red...............................................
    Reply With Quote  
     

  6. #6  
    Banned
    Join Date
    Dec 2013
    Posts
    45
    Thanks given
    2
    Thanks received
    0
    Rep Power
    0
    Quote Originally Posted by Randy View Post
    now mark the error line red...............................................
    Clanchathandler.java
    Code:
    package server.world;
    
    import server.model.players.Client;
    import server.util.Misc;
    import server.Server;
    import server.Connection;
    import server.Config;
    
    import java.util.ArrayList;
    
    /**
     * @author Sanity, PJNoMore
     */
    
    public class ClanChatHandler {
    
    	public ClanChatHandler() {
    	
    	}
    	
    	public Clan[] clans = new Clan[100];
    	
    	
    	public void handleClanChat(Client c, String name) {
    		if (c.clanId != -1) {
    			c.sendMessage("You are already in a clan!");
    			return;
    		}
    		for (int j = 0; j < clans.length; j++) {
    			if (clans[j] != null) {
    				if (clans[j].name.equalsIgnoreCase(name)) {
    					if(checkPass(c, j)){
    						addToClan(c.playerId, j);
    						return;
    					} else {
    						c.sendMessage("Incorrect password!");
    						return;
    					}
    				}
    			}
    		}
    		makeClan(c, name);
    	}
    	
    	
    	public void makeClan(Client c, String name) {
    		
    		String pass = null;
    		boolean loot = false;
    		
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				c.clanId = openClan();
    				createClan(c.playerName, name, pass, loot, false);
    				addToClan(c.playerId, c.clanId);
    				Server.pJClans.saveClan(c.playerName, name, pass, loot, false);
    			} else {
    				c.sendMessage("A clan with this name already exists.");
    			}
    		} else {
    			c.sendMessage("Your clan chat request could not be completed.");
    		}
    	}
    	
    	public void mutePlayer(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] <= 0) {
    							clans[c.clanId].mutedMembers[j] = i;
    							c2.sendMessage("You have been muted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public void unmutePlayer(Client c, String name){
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] == i) {
    							clans[c.clanId].mutedMembers[j] = -1;
    							c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public boolean isOwner(Client c) {
    		//String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase();
    		//name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    		if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) {
    			return true;
    		}
    		if (c.playerRights == 7) {
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isInClan(Client c) {
    		for(int i = 0; i < clans.length; i++) {
    			if(clans[i] != null){
    				for(int j = 0; i < clans[i].members.length; j++) {
    					if(clans[i].members[j] == c.playerId){
    						return true;
    					}
    				}
    			}
    		}
    		return false;
    	}
    	
    	public boolean isClanMuted(Client c) {
    		if (c.playerRights == 7) {
    			return false;
    		}
    		for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) {
    			if(clans[c.clanId].members[i] == c.playerId) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) {
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass);
    			}
    		}
    	}
    	
    	public void setClanPassword(Client c, String pass, boolean hasPass) {
    		if(isOwner(c)){
    			clans[c.clanId].password = pass;
    			clans[c.clanId].hasPassword = hasPass;
    			c.sendMessage("Your new clan chat password is: "+pass);
    		} else {
    			c.sendMessage("You do not have the rights to change this clan's password.");
    		}
    	}
    	
    	
    	
    	public void changeOwner(Client c, String name) {
    		if (c.clanId == -1) {
    			c.sendMessage("You are not in a clan!");
    			return;
    		}
    		if (c.playerRights == 7) {
    			clans[c.clanId].owner = name;
    			updateClanChat(c.clanId);
    		}
    	}
    	
    	public void kickPlayerFromClan(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to kick players from this clan chat!");
    			return;
    		}
    		if (c.playerName.equalsIgnoreCase(name)){
    			c.sendMessage("You may not kick yourself from a clan chat!");
    			return;
    		}
    		if (c.clanId < 0) {
    			c.sendMessage("You are not in a clan.");
    			return;		
    		}
    		
    		for (int i = 0; i < Config.MAX_PLAYERS; i++) {
    			if (Server.playerHandler.players[i] != null) {
    				if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    					Client c2 = (Client)Server.playerHandler.players[i];
    					if(c2.playerRights == 7){
    						c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!");
    						c2.sendMessage(c.playerName+" has tried to kick you from his/her clan.");
    						return;
    					}
    					c2.clanId = -1;
    					c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName);
    					c2.getPA().clearClanChat();
    					c.sendMessage("You have kicked "+c2.playerName+" from your clan.");
    					for (int j = 0; j < clans[c.clanId].members.length; j++) {
    						if (clans[c.clanId].members[j] == i) {
    							clans[c.clanId].members[j] = -1;
    						}
    					}
    				}
    			}
    		}
    		updateClanChat(c.clanId);
    	}
    
    	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 boolean checkPass(Client c, int clanId){
    			if(!clans[clanId].hasPassword){
    				return true;
    			}
    			if(c.playerRights == 7) {
    				return true;
    			}
    			if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) {
    				return true;
    			}
    			if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) {
    				return true;
    			}
    		return false;
    	}
    	
    	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);
    String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    messageToClan(name + " has joined the channel.", clanId);					
    						//messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId);
    						updateClanChat(clanId);
    						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] != null) {
    				Client c = (Client)Server.playerHandler.players[playerId];
    				Server.playerHandler.players[playerId].clanId = -1;
    				c.sendMessage("You have left the clan.");
    				c.getPA().clearClanChat();
    				for (int j = 0; j < clans[clanId].members.length; j++) {
    					if (clans[clanId].members[j] == playerId) {
    						clans[clanId].members[j] = -1;
    					}
    				}
    for (int j = 0; j < clans[clanId].members.length; j++) {
    	int playerIdSlot = clans[clanId].members[j];
    
    	if(playerIdSlot > -1) {
    		Client player = (Client)Server.playerHandler.players[playerIdSlot];
    	
    		if(player != null) {
    		String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    			player.sendMessage(name + " has left the clan.");
    		}
    	}
    }
    			}
    			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 = "";
    		clans[clanId].password = null;
    		clans[clanId].hasPassword = false;
    	}
    	
    	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("@bla@" + message);
    			}
    		}	
    	}
    	
    	public void playerMessageToClan(int playerId, String message, int clanId) {
    		if (clanId < 0)
    			return;
    		if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted and are not permitted to speak!");
    			return;
    		}
    		if (isClanMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted in this clan and are not permitted to speak!");
    			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.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights);
    				c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(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 void handleLootShare(Client c, int item, int amount) {
    		//String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		//c.playerName.substring(0, 1).toUpperCase()  + c.playerName.substring(1);
    			sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + ".");	
    	}
    	
    }
    Done
    Reply With Quote  
     

  7. #7  
    Banned
    Join Date
    Dec 2013
    Posts
    45
    Thanks given
    2
    Thanks received
    0
    Rep Power
    0
    Quote Originally Posted by NoChildSupport View Post
    Post your sendlootshare message, aswell the lootshare method you are calling when an npc drops an item
    Clanchathandler.java
    Code:
    package server.world;
    
    import server.model.players.Client;
    import server.util.Misc;
    import server.Server;
    import server.Connection;
    import server.Config;
    
    import java.util.ArrayList;
    
    /**
     * @author Sanity, PJNoMore
     */
    
    public class ClanChatHandler {
    
    	public ClanChatHandler() {
    	
    	}
    	
    	public Clan[] clans = new Clan[100];
    	
    	
    	public void handleClanChat(Client c, String name) {
    		if (c.clanId != -1) {
    			c.sendMessage("You are already in a clan!");
    			return;
    		}
    		for (int j = 0; j < clans.length; j++) {
    			if (clans[j] != null) {
    				if (clans[j].name.equalsIgnoreCase(name)) {
    					if(checkPass(c, j)){
    						addToClan(c.playerId, j);
    						return;
    					} else {
    						c.sendMessage("Incorrect password!");
    						return;
    					}
    				}
    			}
    		}
    		makeClan(c, name);
    	}
    	
    	
    	public void makeClan(Client c, String name) {
    		
    		String pass = null;
    		boolean loot = false;
    		
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				c.clanId = openClan();
    				createClan(c.playerName, name, pass, loot, false);
    				addToClan(c.playerId, c.clanId);
    				Server.pJClans.saveClan(c.playerName, name, pass, loot, false);
    			} else {
    				c.sendMessage("A clan with this name already exists.");
    			}
    		} else {
    			c.sendMessage("Your clan chat request could not be completed.");
    		}
    	}
    	
    	public void mutePlayer(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] <= 0) {
    							clans[c.clanId].mutedMembers[j] = i;
    							c2.sendMessage("You have been muted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public void unmutePlayer(Client c, String name){
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] == i) {
    							clans[c.clanId].mutedMembers[j] = -1;
    							c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public boolean isOwner(Client c) {
    		//String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase();
    		//name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    		if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) {
    			return true;
    		}
    		if (c.playerRights == 7) {
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isInClan(Client c) {
    		for(int i = 0; i < clans.length; i++) {
    			if(clans[i] != null){
    				for(int j = 0; i < clans[i].members.length; j++) {
    					if(clans[i].members[j] == c.playerId){
    						return true;
    					}
    				}
    			}
    		}
    		return false;
    	}
    	
    	public boolean isClanMuted(Client c) {
    		if (c.playerRights == 7) {
    			return false;
    		}
    		for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) {
    			if(clans[c.clanId].members[i] == c.playerId) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) {
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass);
    			}
    		}
    	}
    	
    	public void setClanPassword(Client c, String pass, boolean hasPass) {
    		if(isOwner(c)){
    			clans[c.clanId].password = pass;
    			clans[c.clanId].hasPassword = hasPass;
    			c.sendMessage("Your new clan chat password is: "+pass);
    		} else {
    			c.sendMessage("You do not have the rights to change this clan's password.");
    		}
    	}
    	
    	
    	
    	public void changeOwner(Client c, String name) {
    		if (c.clanId == -1) {
    			c.sendMessage("You are not in a clan!");
    			return;
    		}
    		if (c.playerRights == 7) {
    			clans[c.clanId].owner = name;
    			updateClanChat(c.clanId);
    		}
    	}
    	
    	public void kickPlayerFromClan(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to kick players from this clan chat!");
    			return;
    		}
    		if (c.playerName.equalsIgnoreCase(name)){
    			c.sendMessage("You may not kick yourself from a clan chat!");
    			return;
    		}
    		if (c.clanId < 0) {
    			c.sendMessage("You are not in a clan.");
    			return;		
    		}
    		
    		for (int i = 0; i < Config.MAX_PLAYERS; i++) {
    			if (Server.playerHandler.players[i] != null) {
    				if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    					Client c2 = (Client)Server.playerHandler.players[i];
    					if(c2.playerRights == 7){
    						c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!");
    						c2.sendMessage(c.playerName+" has tried to kick you from his/her clan.");
    						return;
    					}
    					c2.clanId = -1;
    					c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName);
    					c2.getPA().clearClanChat();
    					c.sendMessage("You have kicked "+c2.playerName+" from your clan.");
    					for (int j = 0; j < clans[c.clanId].members.length; j++) {
    						if (clans[c.clanId].members[j] == i) {
    							clans[c.clanId].members[j] = -1;
    						}
    					}
    				}
    			}
    		}
    		updateClanChat(c.clanId);
    	}
    
    	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 boolean checkPass(Client c, int clanId){
    			if(!clans[clanId].hasPassword){
    				return true;
    			}
    			if(c.playerRights == 7) {
    				return true;
    			}
    			if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) {
    				return true;
    			}
    			if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) {
    				return true;
    			}
    		return false;
    	}
    	
    	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);
    String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    messageToClan(name + " has joined the channel.", clanId);					
    						//messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId);
    						updateClanChat(clanId);
    						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] != null) {
    				Client c = (Client)Server.playerHandler.players[playerId];
    				Server.playerHandler.players[playerId].clanId = -1;
    				c.sendMessage("You have left the clan.");
    				c.getPA().clearClanChat();
    				for (int j = 0; j < clans[clanId].members.length; j++) {
    					if (clans[clanId].members[j] == playerId) {
    						clans[clanId].members[j] = -1;
    					}
    				}
    for (int j = 0; j < clans[clanId].members.length; j++) {
    	int playerIdSlot = clans[clanId].members[j];
    
    	if(playerIdSlot > -1) {
    		Client player = (Client)Server.playerHandler.players[playerIdSlot];
    	
    		if(player != null) {
    		String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    			player.sendMessage(name + " has left the clan.");
    		}
    	}
    }
    			}
    			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 = "";
    		clans[clanId].password = null;
    		clans[clanId].hasPassword = false;
    	}
    	
    	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("@bla@" + message);
    			}
    		}	
    	}
    	
    	public void playerMessageToClan(int playerId, String message, int clanId) {
    		if (clanId < 0)
    			return;
    		if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted and are not permitted to speak!");
    			return;
    		}
    		if (isClanMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted in this clan and are not permitted to speak!");
    			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.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights);
    				c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(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 void handleLootShare(Client c, int item, int amount) {
    		//String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		//c.playerName.substring(0, 1).toUpperCase()  + c.playerName.substring(1);
    			sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + ".");	
    	}
    	
    }
    Reply With Quote  
     

  8. #8  
    Development Services √

    Oogle's Avatar
    Join Date
    Apr 2012
    Age
    25
    Posts
    3,976
    Thanks given
    650
    Thanks received
    516
    Rep Power
    483
    Quote Originally Posted by Randy View Post
    now mark the error line red...............................................
    Or you could save the file and open it up in Eclipse and help him instead of being a cunt....


    Attached image

    Attached image
    Reply With Quote  
     

  9. Thankful users:


  10. #9  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    Quote Originally Posted by 2012ftw View Post
    Clanchathandler.java
    Code:
    package server.world;
    
    import server.model.players.Client;
    import server.util.Misc;
    import server.Server;
    import server.Connection;
    import server.Config;
    
    import java.util.ArrayList;
    
    /**
     * @author Sanity, PJNoMore
     */
    
    public class ClanChatHandler {
    
    	public ClanChatHandler() {
    	
    	}
    	
    	public Clan[] clans = new Clan[100];
    	
    	
    	public void handleClanChat(Client c, String name) {
    		if (c.clanId != -1) {
    			c.sendMessage("You are already in a clan!");
    			return;
    		}
    		for (int j = 0; j < clans.length; j++) {
    			if (clans[j] != null) {
    				if (clans[j].name.equalsIgnoreCase(name)) {
    					if(checkPass(c, j)){
    						addToClan(c.playerId, j);
    						return;
    					} else {
    						c.sendMessage("Incorrect password!");
    						return;
    					}
    				}
    			}
    		}
    		makeClan(c, name);
    	}
    	
    	
    	public void makeClan(Client c, String name) {
    		
    		String pass = null;
    		boolean loot = false;
    		
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				c.clanId = openClan();
    				createClan(c.playerName, name, pass, loot, false);
    				addToClan(c.playerId, c.clanId);
    				Server.pJClans.saveClan(c.playerName, name, pass, loot, false);
    			} else {
    				c.sendMessage("A clan with this name already exists.");
    			}
    		} else {
    			c.sendMessage("Your clan chat request could not be completed.");
    		}
    	}
    	
    	public void mutePlayer(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] <= 0) {
    							clans[c.clanId].mutedMembers[j] = i;
    							c2.sendMessage("You have been muted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public void unmutePlayer(Client c, String name){
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to do that!");
    			return;
    		}
    		if (clans[c.clanId] != null) {
    			for (int j = 0; j < clans[c.clanId].mutedMembers.length; j++) {
    				for(int i = 0; j < Config.MAX_PLAYERS; i++) {
    					if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    						Client c2 = (Client)Server.playerHandler.players[i];
    						if (!isInClan(c2)) {
    							c.sendMessage(c2.playerName+" is not in your clan!");
    							return;
    						}
    						if (clans[c.clanId].mutedMembers[j] == i) {
    							clans[c.clanId].mutedMembers[j] = -1;
    							c2.sendMessage("You have been unmuted in: " + clans[c.clanId].name);
    						}
    					} else {
    						c.sendMessage("This person is not online!");
    					}
    				}
    			}			
    		}
    	}
    	
    	public boolean isOwner(Client c) {
    		//String name = Server.playerHandler.players[c.playerId].playerName.toLowerCase();
    		//name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    		if (clans[c.clanId].owner.equalsIgnoreCase(c.playerName)) {
    			return true;
    		}
    		if (c.playerRights == 7) {
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isInClan(Client c) {
    		for(int i = 0; i < clans.length; i++) {
    			if(clans[i] != null){
    				for(int j = 0; i < clans[i].members.length; j++) {
    					if(clans[i].members[j] == c.playerId){
    						return true;
    					}
    				}
    			}
    		}
    		return false;
    	}
    	
    	public boolean isClanMuted(Client c) {
    		if (c.playerRights == 7) {
    			return false;
    		}
    		for(int i = 0; i < clans[c.clanId].mutedMembers[i]; i++) {
    			if(clans[c.clanId].members[i] == c.playerId) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	public void createClan(String owner, String name, String pass, boolean lootshare, boolean hasPass) {
    		if (openClan() >= 0) {
    			if (validName(name)) {
    				clans[openClan()] = new Clan (owner,name,pass,lootshare,hasPass);
    			}
    		}
    	}
    	
    	public void setClanPassword(Client c, String pass, boolean hasPass) {
    		if(isOwner(c)){
    			clans[c.clanId].password = pass;
    			clans[c.clanId].hasPassword = hasPass;
    			c.sendMessage("Your new clan chat password is: "+pass);
    		} else {
    			c.sendMessage("You do not have the rights to change this clan's password.");
    		}
    	}
    	
    	
    	
    	public void changeOwner(Client c, String name) {
    		if (c.clanId == -1) {
    			c.sendMessage("You are not in a clan!");
    			return;
    		}
    		if (c.playerRights == 7) {
    			clans[c.clanId].owner = name;
    			updateClanChat(c.clanId);
    		}
    	}
    	
    	public void kickPlayerFromClan(Client c, String name) {
    		if (!isOwner(c)) {
    			c.sendMessage("You do not have the power to kick players from this clan chat!");
    			return;
    		}
    		if (c.playerName.equalsIgnoreCase(name)){
    			c.sendMessage("You may not kick yourself from a clan chat!");
    			return;
    		}
    		if (c.clanId < 0) {
    			c.sendMessage("You are not in a clan.");
    			return;		
    		}
    		
    		for (int i = 0; i < Config.MAX_PLAYERS; i++) {
    			if (Server.playerHandler.players[i] != null) {
    				if (Server.playerHandler.players[i].playerName.equalsIgnoreCase(name)) {
    					Client c2 = (Client)Server.playerHandler.players[i];
    					if(c2.playerRights == 7){
    						c.sendMessage("You may @red@NOT@bla@ kick the developer from you clan!");
    						c2.sendMessage(c.playerName+" has tried to kick you from his/her clan.");
    						return;
    					}
    					c2.clanId = -1;
    					c2.sendMessage("You have been kicked from "+clans[c.clanId].name+" by "+c.playerName);
    					c2.getPA().clearClanChat();
    					c.sendMessage("You have kicked "+c2.playerName+" from your clan.");
    					for (int j = 0; j < clans[c.clanId].members.length; j++) {
    						if (clans[c.clanId].members[j] == i) {
    							clans[c.clanId].members[j] = -1;
    						}
    					}
    				}
    			}
    		}
    		updateClanChat(c.clanId);
    	}
    
    	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 boolean checkPass(Client c, int clanId){
    			if(!clans[clanId].hasPassword){
    				return true;
    			}
    			if(c.playerRights == 7) {
    				return true;
    			}
    			if(clans[clanId].owner.equalsIgnoreCase(c.playerName)) {
    				return true;
    			}
    			if (clans[clanId].password.equalsIgnoreCase(c.clanPass)) {
    				return true;
    			}
    		return false;
    	}
    	
    	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);
    String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    messageToClan(name + " has joined the channel.", clanId);					
    						//messageToClan(Server.playerHandler.players[playerId].playerName + " has joined the channel.", clanId);
    						updateClanChat(clanId);
    						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] != null) {
    				Client c = (Client)Server.playerHandler.players[playerId];
    				Server.playerHandler.players[playerId].clanId = -1;
    				c.sendMessage("You have left the clan.");
    				c.getPA().clearClanChat();
    				for (int j = 0; j < clans[clanId].members.length; j++) {
    					if (clans[clanId].members[j] == playerId) {
    						clans[clanId].members[j] = -1;
    					}
    				}
    for (int j = 0; j < clans[clanId].members.length; j++) {
    	int playerIdSlot = clans[clanId].members[j];
    
    	if(playerIdSlot > -1) {
    		Client player = (Client)Server.playerHandler.players[playerIdSlot];
    	
    		if(player != null) {
    		String name = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		name = name.substring(0, 1).toUpperCase()  + name.substring(1);
    			player.sendMessage(name + " has left the clan.");
    		}
    	}
    }
    			}
    			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 = "";
    		clans[clanId].password = null;
    		clans[clanId].hasPassword = false;
    	}
    	
    	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("@bla@" + message);
    			}
    		}	
    	}
    	
    	public void playerMessageToClan(int playerId, String message, int clanId) {
    		if (clanId < 0)
    			return;
    		if (Connection.isMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted and are not permitted to speak!");
    			return;
    		}
    		if (isClanMuted((Client)Server.playerHandler.players[playerId])) {
    			Client c = (Client)Server.playerHandler.players[playerId];
    			c.sendMessage("You are muted in this clan and are not permitted to speak!");
    			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.sendClan(Server.playerHandler.players[playerId].playerName, message, clans[clanId].name, Server.playerHandler.players[playerId].playerRights);
    				c.sendClan(Misc.optimizeText(Server.playerHandler.players[playerId].playerName), message, Misc.optimizeText(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 void handleLootShare(Client c, int item, int amount) {
    		//String name2 = Server.playerHandler.players[playerId].playerName.toLowerCase();
    		//c.playerName.substring(0, 1).toUpperCase()  + c.playerName.substring(1);
    			sendLootShareMessage(c.clanId, c.playerName + " has received " + amount + "x " + server.model.items.Item.getItemName(item) + ".");	
    	}
    	
    }
    also your npchandler dropitem method
    Reply With Quote  
     

  11. #10  
    Banned
    Join Date
    Dec 2013
    Posts
    45
    Thanks given
    2
    Thanks received
    0
    Rep Power
    0
    Quote Originally Posted by NoChildSupport View Post
    also your npchandler dropitem method
    i made 2 things green that is were the errors came from

    Npchandler.java
    Code:
    package server.model.npcs;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    import server.clip.*;
    import server.clip.region.*;
    import server.content.RiverTroll;
    import server.content.RockGolem;
    import server.content.SpiritTree;
    import server.content.Zombie;
    
    import java.util.ArrayList;
    
    import server.event.CycleEvent;
    import server.event.CycleEventContainer;
    import server.event.CycleEventHandler;
    import server.event.Event;
    import server.event.EventContainer;
    import server.event.EventManager;
    import server.Config;
    import server.Server;
    import server.model.minigames.FightCaves;
    import server.model.players.Client;
    import server.model.players.Player;
    import server.model.players.PlayerHandler;
    import server.util.Misc;
    
    public class NPCHandler {
    	public static int maxNPCs = 10000;
    	public static int maxListedNPCs = 10000;
    	public static int maxNPCDrops = 10000;
    	public static NPC npcs[] = new NPC[maxNPCs];
    	public static NPCList NpcList[] = new NPCList[maxListedNPCs];
    
    	public NPCHandler() {
    		for(int i = 0; i < maxNPCs; i++) {
    			npcs[i] = null;
    		}
    		for(int i = 0; i < maxListedNPCs; i++) {
    			NpcList[i] = null;
    		}
    		loadNPCList("./Data/CFG/npc.cfg");
    		loadAutoSpawn("./Data/CFG/spawn-config.cfg");
    		//System.out.println("NPC Spawns Loaded");
    	}
    	
    	public void multiAttackGfx(int i, int gfx) {
    		if (npcs[i].projectileId < 0)
    			return;
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null) {
    				Client c = (Client)Server.playerHandler.players[j];
    				if (c.heightLevel != npcs[i].heightLevel)
    					continue;
    				if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) {
    					int nX = Server.npcHandler.npcs[i].getX() + offset(i);
    					int nY = Server.npcHandler.npcs[i].getY() + offset(i);
    					int pX = c.getX();
    					int pY = c.getY();
    					int offX = (nY - pY)* -1;
    					int offY = (nX - pX)* -1;
    					c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65);					
    				}
    			}		
    		}
    	}
    	
    	public boolean switchesAttackers(int i) {
    		switch(npcs[i].npcType) {
    		case 6560:
    		case 6222:
    		case 50:
    		case 2551:
    		case 2552:
    		case 2553:
    		case 2559:
    		case 2560:
    		case 2561:
    		case 2563:
    		case 2564:
    		case 2565:
    		case 2892:
    		case 2894:
    		return true;
    		}
    		return false;
    		}
    		
    	public static int[] godwarsBoss = {};
    
    	public static int[] zamGodKC = { 6203, 6206, 6204, 6208, 6210, 6211, 6212,
    			6214, 6218, 49, 82, 83, 84, 94, 92, 75, 78, 912, 6220 };
    	public static int[] saraGodKC = { 6247, 6252, 6250, 6248, 6254, 6255, 6256,
    			6257, 6258, 6259, 96, 97, 111, 125, 913 };
    	public static int[] armaGodKC = { 6222, 6227, 6225, 6223, 6229, 6230, 6231,
    			6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242,
    			6243, 6244, 6245, 6246, 275, 274 };
    	public static int[] bandosGodKC = { 6260, 6265, 6263, 6261, 6271, 6272,
    			6273, 6274, 6275, 6268, 122, 6279, 6280, 6281, 6282, 6283, 6269,
    			6270, 6276, 6277, 6278 };
    	
    	public void appendBandosKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : bandosGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[0] < 4000) {
    						c.godwarsKillCount[0]++;
    						//c.sendMessage("Bandos Killcount: " + c.bandosGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[0],
    								16217);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	
    	public void appendArmadylKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : armaGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[3] < 4000) {
    						c.godwarsKillCount[3]++;
    						//c.sendMessage("Armadyl Killcount: " + c.armaGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[3],
    								16216);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	public void appendSaradominKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : saraGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[2] < 4000) {
    						c.godwarsKillCount[2]++;
    						//c.sendMessage("Saradomin Killcount: " + c.saraGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[2],
    								16218);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	public void appendZamorakKC(int i) {
    		Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    		if (c != null) {
    			for (int j : zamGodKC) {
    				if (npcs[i].npcType == j) {
    					if (c.godwarsKillCount[1] < 4000) {
    						c.godwarsKillCount[1]++;
    						//c.sendMessage("Zamorak Killcount: " + c.zamGwdKC);
    						c.getPA().sendFrame126("@cya@" + c.godwarsKillCount[1],
    								16219);
    					}
    					
    					break;
    				}
    			}
    		}
    	}
    	
    	public void multiAttackDamage(int i) {
    		int max = getMaxHit(i);
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null) {
    				Client c = (Client)Server.playerHandler.players[j];
    				if (c.isDead || c.heightLevel != npcs[i].heightLevel)
    					continue;
    				if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) {
    					if (npcs[i].attackType == 2) {
    						if (!c.prayerActive[16]) {
    							if (Misc.random(500) + 200 > Misc.random(c.getCombat().mageDef())) {
    								int dam = Misc.random(max);
    								c.dealDamage(dam);
    								c.handleHitMask(dam);							
    							} else {
    								c.dealDamage(0);
    								c.handleHitMask(0);							
    							}
    						} else {
    							c.dealDamage(0);
    							c.handleHitMask(0);
    						}
    					} else if (npcs[i].attackType == 1) {
    						if (!c.prayerActive[17]) {
    							int dam = Misc.random(max);
    							if (Misc.random(500) + 200 > Misc.random(c.getCombat().calculateRangeDefence())) {
    								c.dealDamage(dam);
    								c.handleHitMask(dam);							
    							} else {
    								c.dealDamage(0);
    								c.handleHitMask(0);
    							}
    						} else {
    							c.dealDamage(0);
    							c.handleHitMask(0);							
    						}
    					}
    					if (npcs[i].endGfx > 0) {
    						c.gfx0(npcs[i].endGfx);					
    					}
    				}
    				c.getPA().refreshSkill(3);
    			}		
    		}
    	}
    	
    	private void spawnSecondForm(final int i) {
    		npcs[i].gfx0(1055);
    		EventManager.getSingleton().addEvent(new Event() {
    		public void execute(EventContainer e) {
    
    		spawnNpc2(1160, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300);
    			e.stop();	
    			}
    		}, 15000);
    	}
    	
    	
    	/**
    	* kq respawn first form
    	*/
    	private void spawnFirstForm(final int i) {
    	EventManager.getSingleton().addEvent(new Event() {
    		public void execute(EventContainer e) {
    	
    	spawnNpc2(1158, npcs[i].absX, npcs[i].absY, 0, 1, 250, 45, 500, 300);
    		e.stop();
    		
    			}
    	
    	 	}, 10000);
    	}
    	
    	public int getClosePlayer(int i) {
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null) {
    				if (j == npcs[i].spawnedBy)
    					return j;
    				if (goodDistance(Server.playerHandler.players[j].absX, Server.playerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) {
    					if ((Server.playerHandler.players[j].underAttackBy <= 0 && Server.playerHandler.players[j].underAttackBy2 <= 0) || Server.playerHandler.players[j].inMulti())
    						if (Server.playerHandler.players[j].heightLevel == npcs[i].heightLevel)
    							return j;
    				}
    			}	
    		}
    		return 0;
    	}
    	
    	public int getCloseRandomPlayer(int i) {
    		ArrayList<Integer> players = new ArrayList<Integer>();
    		for (int j = 0; j < PlayerHandler.players.length; j++) {
    			if (PlayerHandler.players[j] != null) {
    				if (goodDistance(PlayerHandler.players[j].absX, PlayerHandler.players[j].absY, npcs[i].absX, npcs[i].absY, 2 + distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) {
    					if ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j].inMulti())
    						if (PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) 
    							players.add(j);
    			}
    			}
    		}
    		if (players.size() > 0)
    			return players.get(Misc.random(players.size() -1));
    		else
    			return 0;
    	}
    	
    	public int getCloseRandomPlayer1(int i) {
    		ArrayList<Integer> players = new ArrayList<Integer>();
    		for (int j = 0; j < PlayerHandler.players.length; j++) {
    			if (PlayerHandler.players[j] != null
    					&& (goodDistance(PlayerHandler.players[j].getX(),
    							PlayerHandler.players[j].getY(),
    							npcs[i].getAbsX(), npcs[i].getAbsY(),
    							50 + followDistance(i)) || isFightCaveNpc(i))
    					&& ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0) || PlayerHandler.players[j]
    							.inMulti())
    					&& PlayerHandler.players[j].heightLevel == npcs[i].heightLevel) {
    				if (PlayerHandler.players[j].inGodWarsBoss()) {
    					players.add(j);
    				}
    			}
    		}
    		return players.size() > 0 ? players
    				.get(Misc.random(players.size() - 1)) : 0;
    	}
    	
    	public int npcSize(int i) {
    		switch (npcs[i].npcType) {
    	/*	case 50:
    			return 5;*/
    		case 2883:
    		case 2882:
    		case 2881:
    			return 3;
    		}
    		return 0;
    	}
    	
    	public boolean isReallyAggressive(int i) {
    		switch (npcs[i].npcType) {
    		case 6203:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6247:
    		case 6252:
    		case 6250:
    		case 6248:
    		case 6260:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 6223:
    		case 6225:
    		case 6227:
    		case 6222:
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean isAggressive(int i) {
    		switch (npcs[i].npcType) {
    		case 119:
    		case 1931:
    		case 1154:
    		case 1155:
    		case 1159:
    		case 1158:
    		case 1160:
    		case 1157:
    			case 195:
    			case 2550:
    			case 2551:
    			case 2552:
    			case 2553:
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2561:
    			case 2562:
    			case 2563:
    			case 2564:
    			case 2565:
    			case 2892:
    			case 2894:
    			case 2881:
    			case 2882:
    			case 2883:
    			case 50:
    			case 941:
    			return true;		
    		}
    		if (npcs[i].inWild() && npcs[i].MaxHP > 0)
    			return true;
    		if (isFightCaveNpc(i))
    			return true;
    		return false;
    	}
    	
    	public boolean isFightCaveNpc(int i) {
    		switch (npcs[i].npcType) {
    			case 2627:
    			case 2630:
    			case 2631:
    			case 2741:
    			case 2743: 
    			case 2745:
    			return true;		
    		}
    		return false;
    	}
    	
    	/**
    	* Summon npc, barrows, etc
    	**/
    	public void spawnNpc(final Client c, int  npcType, int x, int y, int heightLevel, int WalkingType, int HP, int  maxHit, int attack, int defence, boolean attackPlayer, boolean headIcon)  {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 1; i < maxNPCs; i++) {
    			if (npcs[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    		if(slot == -1) {
    			//Misc.println("No Free Slot");
    			return;		// no free slot found
    		}
    		final NPC newNPC = new NPC(slot, npcType);
    		newNPC.absX = x;
    		newNPC.absY = y;
    		newNPC.makeX = x;
    		newNPC.makeY = y;
    		newNPC.heightLevel = heightLevel;
    		newNPC.walkingType = WalkingType;
    		newNPC.HP = HP;
    		newNPC.MaxHP = HP;
    		newNPC.maxHit = maxHit;
    		newNPC.attack = attack;
    		newNPC.defence = defence;
    		newNPC.spawnedBy = c.getId();
    		newNPC.dagColor = getDagColor(npcType);
    		if(headIcon) 
    			c.getPA().drawHeadicon(1, slot, 0, 0);
    		if(attackPlayer) {
    			newNPC.underAttack = true;
    			if(c != null) {
    				if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] != newNPC.npcType) {
    					if(newNPC.npcType == 2025 || newNPC.npcType == 2026 || newNPC.npcType == 2027 || newNPC.npcType == 2028 || newNPC.npcType == 2029 || newNPC.npcType == 2030) {
    						newNPC.forceChat("You dare disturb my rest!");
    					}
    				}
    				int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284};
    				for(int z = 0; z < animatedArmor.length; z++) {
    					if (newNPC.npcType == animatedArmor[z]) {
    						newNPC.forceAnim(4410);
    						newNPC.forceChat("I'M ALIVE!");
    					}
    				}
    				if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] == newNPC.npcType) {
    					newNPC.forceChat("You dare steal from us!");
    				}
    				
    				newNPC.killerId = c.playerId;
    			}
    		}
            for(int[] aSpiritTree : SpiritTree.spiritTree) {
                if(newNPC.npcType == aSpiritTree[2]) {
                    newNPC.forceChat("Leave these woods and never return!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                           // if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.treeSpawned = false;
                           // }
                        }
                    }, 200);
                }
            }
            for(int[] aRockGolem : RockGolem.rockGolem) {
                if(newNPC.npcType == aRockGolem[2]) {
                    newNPC.forceChat("Raarrrgghh! Flee human!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                         //   if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.golemSpawned = false;
                          //  }
                        }
                    }, 200);
                }
            }
            for(int[] aRiverTroll : RiverTroll.riverTroll) {
                if(newNPC.npcType == aRiverTroll[2]) {
                    newNPC.forceChat("Fishies be mine! Leave dem fishies!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                         //   if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.trollSpawned = false;
                           // }
                        }
                    }, 200);
                }
            }
            for(int[] aZombie : Zombie.zombie) {
                if(newNPC.npcType == aZombie[2]) {
                    newNPC.forceChat("Braaaainssss!");
                    CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
                        @Override
                        public void execute(CycleEventContainer container) {
                            container.stop();
                        }
                        @Override
                        public void stop() {
                          //  if(!newNPC.isDead) {
                                newNPC.isDead = true;
                                newNPC.updateRequired = true;
                                c.zombieSpawned = false;
                           // }
                        }
                    }, 200);
                }
            }
    		npcs[slot] = newNPC;
    	}
    	
    	public String getDagColor(int npcType) {
    		int dags[] = {
    			1351, 1352, 1356, 1353, 1354, 1355
    		};
    		String colors[] = {
    			"white", "blue", "brown", "red", "orange", "green"
    		};
    		for(int i = 0; i < dags.length; i++) {
    			if(npcType == dags[i]) {
    				return colors[i];
    			}
    		}
    		return "";
    	}
    	
    	public void getDtLastKill(int i) {
    		int dtNpcs[] = {
    			1975, 1914, 1977, 1913
    		};
    		for(int dtNpc : dtNpcs) {
    			if(npcs[i].npcType == dtNpc) {
    				Client p = (Client) Server.playerHandler.players[npcs[i].killedBy];
    				if(p != null) {
    					p.lastDtKill = dtNpc;
    				}
    			}
    		}
    	}
    	
    	public void checkDt(int i) {
    		if(npcs[i] != null) {
    			
    		}
    	}
    	
    	public void checkHfd(int i) {
    		int dags[] = {
    			1351, 1352, 1356,
    			1353, 1354, 1355
    		};
    		for(int j = 0; j < dags.length; j++) {
    			if(npcs[i].npcType == dags[j]) {
    				Client c = (Client) Server.playerHandler.players[npcs[i].killedBy];
    				if(c != null) {
    					c.horrorFromDeep = 2;
    					c.sendMessage("You have completed Horror from the Deep.");
    					c.getAA2().HFTD();
    					if(c.questPoints == 3) {
    						//c.getShops().addQuestCape();
    					}
    					c.getPA().loadQuests();
    				}
    				if(npcs[i] != null) {
    					npcs[i].absX = 0;
    					npcs[i].absY = 0;
    					npcs[i] = null;
    					break;
    				}
    			}
    		}
    	}
    	
    	public void checkRfd(int i) {
    		if(npcs[i] != null) {
    			int playerId = npcs[i].killedBy;
    			if(Server.playerHandler.players[playerId] != null) {
    				Client c = (Client) Server.playerHandler.players[playerId];
    				if(c.roundNpc == 2 && !c.spawned) {
    					spawnNpc(c, 3494, 1899, 5354, c.heightLevel, 1, 210, 24, 70, 60, true, true);
    					c.spawned = true;
    				} else if(c.roundNpc == 3 && !c.spawned) {
    					spawnNpc(c, 3495, 1899, 5354, c.heightLevel, 1, 240, 15, 70, 60, true, true);
    					c.spawned = true;
    				} else if(c.roundNpc == 4 && !c.spawned) {
    					spawnNpc(c, 3496, 1899, 5354, c.heightLevel, 1, 140, 19, 70, 60, true, true);
    					c.spawned = true;
    				} else if(c.roundNpc == 5) {
    					c.getPA().movePlayer(3218, 9621, 0);
    					c.getDH().sendDialogues(30, 608);
    					c.roundNpc = 0;
    					c.questPoints++;
    					if(c.questPoints == 3) {
    						//c.getShops().addQuestCape();
    					}
    					c.getPA().loadQuests();
    				}
    			}
    		}
    	}	
    	
    	public void spawnNpc2(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 1; i < maxNPCs; i++) {
    			if (npcs[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    		if(slot == -1) {
    			//Misc.println("No Free Slot");
    			return;		// no free slot found
    		}
    		NPC newNPC = new NPC(slot, npcType);
    		newNPC.absX = x;
    		newNPC.absY = y;
    		newNPC.makeX = x;
    		newNPC.makeY = y;
    		newNPC.heightLevel = heightLevel;
    		newNPC.walkingType = WalkingType;
    		newNPC.HP = HP;
    		newNPC.MaxHP = HP;
    		newNPC.maxHit = maxHit;
    		newNPC.attack = attack;
    		newNPC.defence = defence;
    		npcs[slot] = newNPC;
    	}
    	
    	
    	
    	/**
    	* Emotes
    	**/
    	
    public static int getAttackEmote(int i) {
    		switch(Server.npcHandler.npcs[i].npcType) {	
            case 1158: //kalphite queen
            	if (npcs[i].attackType == 2)
            	return 6240;
            	if (npcs[i].attackType == 0)
            	return 6241;
            		else
            		return 6240;
            case 1160: //kalphite queen form 2
            	if (npcs[i].attackType == 2)
            	return 6237;
            	if (npcs[i].attackType == 0)
            	return 6235;
            		else
            		return 6237;
    		case 6213:
    		case 6212: return 6547;
    		case 6219:
    		case 6254:
    		case 6255:
    		case 6256:
    		case 6257:
    		case 6258:
    		case 6214: return 806;
    		case 6216: return 1582;
    		case 6218: return 4300;
    		case 6221: return 811;
    		case 1643:
    			return 421;
    		case 90:
    		case 91:
    		case 5359:
    		case 5384:
    		case 92:
    		case 93: //skeleton
    		return 5485;	
    		case 1605:
    			return 1507;
            case 419: //zombie
            case 420:
            case 421:
            case 422:
            case 423:
            case 424:
            return 5568;
    
    case 438:
    case 439:
    case 440:
    case 441:
    case 442: // Tree spirit
    case 443:
        return 94;
    
    case 391:
    case 392:
    case 393:
    case 394:
    case 395://river troll
    case 396:
        return 284;
    
    case 413:
    case 414:
    case 415:
    case 416:
    case 417://rock golem
    case 418:
        return 153;
    		
    		case 6229:
    		case 6230:
    		case 6231:
    		case 6232:
    		case 6233:
    		case 6234:
    		case 6235:
    		case 6236:
    		case 6237:
    		case 6238:
    		case 6239:
    		case 6240:
    		case 6241:
    		case 6242:
    		case 6243:
    		case 6244:
    		case 6245:
    		case 6246:
    			return 6953;
    		case 6210:
    			return 6581;
    		case 6211:
    			return 169;
    		case 6279:
    		case 6280:
    		case 6283:
    			return 6184;
    		case 6276:
    		case 6277:
    			return 4320;
    		case 6275:
    			return 164;
    		case 6282:
    			return 6188;
    		// begin new updates
    		case 112: //moss
    		return 4658;
    		case 103: //ghost
    		return 5540;
    		case 78: //bats
    		return 4915;
    		case 1612: //banshee
    		return 1523;
    		case 2783: //dark beast
    		return 2731;
    		//end
    		case 6248:
    		return 6376;
    		case 6250:
    		return 7018;
    		case 6261:
    		case 6263:
    		case 6265:
    		return 6154;
    		case 6204:
    		case 6206:
    		case 6208:
    		return 6945;
    case 49:
    		return 6579;
    
    case 6247:
    return 6964;
    case 6203:
    return 6945;
    		case 6223:
    		case 6225:
    		case 6227:
    		return 6953;
    		case 6222:
    		return 6976;
    		case 6267:
    		return 359;
    		case 6268:
    		return 2930;
    		case 4291:
    		case 4292:
    		case 6269:
    		return 4652;
    		case 6270:
    		return 4652;
    		case 6271:
    		return 4320;
    		case 6272:
    		return 4320;
    		case 6273:
    		return 4320;
    		case 6274:
    		return 4320;
    			case 1459:
    				return 1402;
    			case 2550:
    				if (npcs[i].attackType == 0)
    					return 7060;
    				else
    					return 7063;	
    					case 86:
    					case 87:
    					return 4933;
    			case 2892:
    			case 2894:
    			return 2868;
    			case 2627:
    			return 2621;
    			case 2630:
    			return 2625;
    			case 2631:
    			return 2633;
    			case 2741:
    			return 2637;
    			case 2746:
    			return 2637;
    			case 2607:
    			return 2611;
    			case 2743://360
    			return 2647;
    			case 6260:
    				if (npcs[i].attackType == 0)
    					return 7060;
    				else
    					return 7063;
    			//end of gwd
    			//arma gwd
    			case 2558:
    			return 3505;
    			case 2560:
    			return 6953;
    			case 2559:
    			return 6952;
    			case 2561:
    			return 6954;
    			//end of arma gwd
    			//sara gwd
    			case 2562:
    			return 6964;
    			case 2563:
    			return 6376;
    			case 2564:
    			return 7018;
    			case 2565:
    			return 7009;
    			//end of sara gwd
    			case 5247:
    			return 5411;
    			case 13: //wizards
    			return 711;
    			
    			case 655:
    			return 5532;
    			
    			case 1624:
    			return 1557;
    			
    			case 1648:
    			return 1590;
    			
    			
    			case 1615: //abby demon
    			return 1537;
    			
    			case 1613: //nech
    			return 1528;
    			
    			case 1610: 
    			case 1611: //garg
    			return 1519;
    			
    			case 1616: //basilisk
    			return 1546;
    			
    			//case 459: //skele
    			//return 260;
    			
    			case 50://drags
    			case 53:
    			case 54:
    			case 55:
    			case 941:
    			case 1590:
    			case 1591:
    			case 1592:
    				if (npcs[i].attackType == 0)
    					return 80;
    				else if (npcs[i].attackType == 2)
    					return 81;
    			case 124: //earth warrior
    			return 390;
    			
    			case 803: //monk
    			return 422;
    			
    			case 52: //baby drag
    			return 25;			
    
    			case 58: //Shadow Spider
                case 59: //Giant Spider
                case 60: //Giant Spider
                case 61: //Spider
                case 62: //Jungle Spider
                case 63: //Deadly Red Spider
                case 64: //Ice Spider
                case 134:
    			return 143;	
    			
    			case 105: //Bear
                case 106:  //Bear
    			return 41;
    			
    			case 412:
    //			case 78:
    			return 30;
    			
    			case 2033: //rat
    			return 138;	
    			
    			case 2031: // bloodworm
    			return 2070;
    			
    			case 101: // goblin
    			return 309;	
    			
    			case 81: // cow
    			return 0x03B;
    			
    			case 21: // hero
    			return 451;	
    			
    			case 41: // chicken
    			return 55;	
    			
    			case 9: // guard
    			case 32: // guard
    			case 20: // paladin
    			return 451;	
    			
    			case 1338: // dagannoth
    			case 1340:
    			case 1342:
    			
    			return 1341;
    		
    			case 19: // white knight
    			return 406;
    			
    			case 110:
    			case 111: // ice giant
    			case 117:
    			return 4652;
    			
    			case 2452:
    			return 1312;
    			
    			case 2889:
    			return 2859;
    			
    			case 118:
    			case 119:
    			return 99;
    			
    			case 82://Lesser Demon
                case 83://Greater Demon
                case 84://Black Demon
                case 1472://jungle demon
    			return 64;
    			
    			case 1267:
    			case 1265:
    			return 1312;
    			
    			case 125: // ice warrior
    			case 178:
    			return 451;
    			
    			case 1153: //Kalphite Worker
                case 1154: //Kalphite Soldier
                case 1155: //Kalphite guardian
                case 1156: //Kalphite worker
                case 1157: //Kalphite guardian
    			return 6241;
    			
    			case 123:
    			case 122:
    			return 164;
    			
    			case 2028: // karil
    			return 2075;
    					
    			case 2025: // ahrim
    			return 729;
    			
    			case 2026: // dharok
    			return 2067;
    			
    			case 2027: // guthan
    			return 2080;
    			
    			case 2029: // torag
    			return 0x814;
    			
    			case 2030: // verac
    			return 2062;
    			
    			case 2881: //supreme
    			return 2855;
    			
    			case 2882: //prime
    			return 2854;
    			
    			case 2883: //rex
    			return 2851;
    			case 5666:
    			int test = Misc.random(2);
    			if(test == 2) {
    			return 5895;
    			} else if(test == 1) {
    			return 5894;
    			} else {
    			return 5896;
    			}
    			
    			case 3200:
    			return 3146;
    			
    			case 2745:
    			if (npcs[i].attackType == 2)
    			return 2656;
    			else if (npcs[i].attackType == 1)
    			return 2652;
    			else if (npcs[i].attackType == 0)
    			return 2655;
    			
    			
    			default:
    			return 0x326;		
    		}
    	}	
    
    
    	
    	
    		public int getDeadEmote(int i) {
    		switch(npcs[i].npcType) {
    		case 1158:
    			spawnSecondForm(i);
    			return 6242;
    		case 1160:
    			spawnFirstForm(i);
    			return 6233;
    		case 90:
    		case 91:
    		case 5359:
    		case 5384:
    		case 92:
    		case 93: //skeleton
    		return 5491;
    	    case 438:
    	    case 439:
    	    case 440:
    	    case 441:
    	    case 442: // Tree spirit
    	    case 443:
    	        return 97;
    		case 110:
    		case 117:
    		return 4653;
    		
    	    case 391:
    	    case 392:
    	    case 393:
    	    case 394:
    	    case 395://river troll
    	    case 396:
    	        return 287;
    	    case 413:
    	    case 414:
    	    case 415:
    	    case 416:
    	    case 417://rock golem
    	    case 418:
    	        return 156;
    	            case 419://zombie
    	            case 420:
    	            case 421:
    	            case 422:
    	            case 423:
    	            case 424:
    	            return 5569;
    		case 6282:
    			return 6182;
    		case 6275:
    			return 167;
    		case 6276:
    		case 6277:
    			return 4321;
    		case 6279:
    		case 6280:
    		case 6283:
    			return 6182;
    		case 6211: return 172;
    		case 6212: return 6537;
    		case 6219:
    		case 6221:
    		case 6254:
    		case 6255:
    		case 6256:
    		case 6257:
    		case 6258:
    		case 6214: return 0x900;
    		case 6216: return 1580;
    		case 6218: return 4302;
    		case 6229:
    		case 6230:
    		case 6231:
    		case 6232:
    		case 6233:
    		case 6234:
    		case 6235:
    		case 6236:
    		case 6237:
    		case 6238:
    		case 6239:
    		case 6240:
    		case 6241:
    		case 6242:
    		case 6243:
    		case 6244:
    		case 6245:
    		case 6246:
    			return 6956;
    		case 6210:
    			return 6576;
    		// begin new updates
    		case 112: //moss
    		return 4659;
    		case 103: //ghost
    		return 5542;
    		case 78: //bats
    		return 4917;
    		//end
    		case 6248:
    		return 6377;
    		case 6250:
    		return 7016;
    		case 6204:
    		case 6206:
    		case 6208:
    		return 6946;
    		case 6261:// Seargent Strongstack
    		case 6263:// Seargent Steelwill
    		case 6265:// Seargent Grimspike
    			return 6156;
    
    		case 6260:// General Graardor
    			return 7062;
    case 6142:
    return 1;
    case 6143:
    return 1;
    case 6144:
    return 1;
    case 6145:
    return 1;
    		case 1265://RockCrab
    return 1314;
    case 914://Battle Mage
    return 196;
    case 3742://Ravager
    case 3743:
    case 3744:
    case 3745:
    case 3746:
    return 3916;
    case 3772://Brawler
    case 3773:
    case 3774:
    case 3775:
    case 3776:
    return 3894;
    		case 49:
    		return 6576;
    		case 1612:// Banshee
    			return 1524;
    
    		case 6222:// Kree'ara
    			return 3503;
    
    		case 6223:// Wingman Skree
    		case 6225:// Flockleader Geerin
    		case 6227:// Flight Kilisa
    			return 6956;
    case 6247:
    return 6965;
    case 6203:
    return 6945;
    
    		case 6267:
    		return 357;
    		case 6268:
    		return 2938;
    		case 6269:
    		case 4291: // Cyclops
    		case 4292: // Ice cyclops
    		case 6270:
    		return 4653;
    		case 6271:
    		case 6272:
    		case 6273:
    		case 6274:
    		return 4321;
    			case 1459:
    			return 1404;
    			//sara gwd
    			case 5247:
    			return 5412;
    			case 2562:
    			return 6965;
    			case 86:
    			case 87:
    			return 4935;
    			case 2563:
    			return 6377;
    			case 2564:
    			return 7016;
    			case 2565:
    			return 7011;
    			case 2550:
    			return 7062;
    			case 2892:
    			case 2894:
    			return 2865;
    			case 2558:
    			return 3503;
    			case 2559:
    			case 2560:
    			case 2561:
    			return 6956;
    			case 2607:
    			return 2607;
    			case 2627:
    			return 2620;
    			case 2630:
    			return 2627;
    			case 2631:
    			return 2630;
    			case 2738:
    			return 2627;
    			case 2741:
    			return 2638;
    			case 2746:
    			return 2638;
    			case 2743:
    			return 2646;
    			case 2745:
    			return 2654;
    			case 6150:
    			case 6151:
    			case 6152:
    			case 6153:
    			return -1;
    			case 5666:
    			return 5898;
    			case 3200:
    			return 3147;
    			case 2035: //spider
    			return 146;
    			case 2033: //rat
    			return 141;
    			case 2031: // bloodvel
    			return 2073;
    			case 101: //goblin
    			return 313;
    			case 81: // cow
    			return 244;
    			case 41: // chicken
    			return 57;
    			case 1338: // dagannoth
    			case 1340:
    			case 1342:
    			return 1342;
    			case 2881:
    			case 2882:
    			case 2883:
    			return 2856;
    			case 111: // ice giant
    			return 131;
    			case 125: // ice warrior
    			return 843;
    			case 751://Zombies!!
    			return 302;
    			case 1626:
                case 1627:
                case 1628:
                case 1629:
                case 1630:
                case 1631:
                case 1632: //turoth!
                return 1597;
    			case 1616: //basilisk
                return 1548;
    			case 1653: //hand
                return 1590;
    			case 82://demons
    			case 83:
    			case 84:
    			return 67;
    			case 1605://abby spec
    			return 1508;
    			case 51://baby drags
    			case 52:
    			case 1589:
    			case 3376:
    			return 28;
    			case 1610:
    			case 1611:
    			return 1520;
    			case 1618:
    			case 1619:
    			return 1553;
    			case 1620:
    			case 1621:
    			return 1563;
    			case 2783:
    			return 2732;
    			case 1615:
    			return 1538;
    			case 1624:
    			return 1558;
    			case 1613:
    			return 1530;
    			case 1633:
    			case 1634:
    			case 1635:
    			case 1636:
    			return 1580;
    			case 1648:
    			case 1649:
    			case 1650:
    			case 1651:
    			case 1652:
    			case 1654:
    			case 1655:
    			case 1656:
    			case 1657:
    			return 1590;
    			case 100:
    			case 102:
    			return 313;
    			case 105:
    			case 106:
    			return 44;
    			case 412:
    //			case 78:
    			return 36;
    			case 122:
    			case 123:
    			return 167;
    			case 58:
    			case 59:
    			case 60:
    			case 61:
    			case 62:
    			case 63:
    			case 64:
    			case 134:
    			return 146;
    			case 1153:
    			case 1154:
    			case 1155:
    			case 1156:
    			case 1157:
    			return 6242;
    //			case 103:
    			case 104:
    			return 5534;
    			case 118:
    			case 119:
    			return 102;
    			case 50://drags
    			return 92;
    			case 53:
    			case 54:
    			case 55:
    			case 941:
    			case 1590:
    			case 1591:
    			case 1592:
    			return 92;
    			default:
    			return 2304;
    		}
    	}
    	
    	/**
    	* Attack delays
    	**/
    	public int getNpcDelay(int i) {
    		switch(npcs[i].npcType) {
    			case 2025:
    			case 2028:
    			return 7;
    			
    			case 2745:
    			return 8;
    			
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2561:
    			case 2550:
    			return 6;
    			//saradomin gw boss
    			case 2562:
    			return 2;
    			
    			case 6260:
    			case 6203:
    			case 6222:
    			case 6247:
    				return 6;
    			
    			default:
    			return 5;
    		}
    	}
    	
    	/**
    	* Hit delays
    	**/
    	public int getHitDelay(int i) {
    		switch(npcs[i].npcType) {
    		case 1158:
    		case 1160:
    			if (npcs[i].attackType == 1 || npcs[i].attackType == 2)
    				return 3;
    			else
    				return 2;
    			case 2881:
    			case 2882:
    			case 3200:
    			case 2892:
    			case 2894:
    			return 3;
    			
    			case 2743:
    			case 2631:
    			case 2558:
    			case 2559:
    			case 2560:
    			return 3;
    			
    			case 2745:
    			if (npcs[i].attackType == 1 || npcs[i].attackType == 2)
    				return 5;
    			else
    				return 2;
    			
    			case 6260:
    				npcs[i].graardor = Misc.random(5);
    				if (npcs[i].graardor == 5) {
    					return 3;
    				}
    				return 2;
    
    			case 6203:
    				npcs[i].tsutsaroth = Misc.random(4);
    				if (npcs[i].tsutsaroth == 4) {
    					return 3;
    				}
    				return 2;
    
    			case 6247:
    				npcs[i].zilyana = Misc.random(6);
    				if (npcs[i].zilyana == 6 || npcs[i].zilyana == 5
    						|| npcs[i].zilyana == 4) {
    					return 6;
    				}
    				return 2;
    			
    			case 946:
    			case 50:
    			case 6208:
    			case 6250:
    			case 6263:
    			case 6223:	
    			case 6222:
    			case 2025:
    			return 2;
    			case 2028:
    			return 3;
    
    			default:
    			return 2;
    		}
    	}
    		
    	/**
    	* Npc respawn time
    	**/
    	public int getRespawnTime(int i) {
    		switch(npcs[i].npcType) {
    		
    		case 6260:
    		case 6247:
    		case 6222:
    		case 6203:
    			return 45;
    		case 1931:
    			return 30;
    			
    		case 1160:
    		case 6142:
    		case 6143:
    		case 6144:
    		case 6145:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6252:
    		case 6250:
    		case 6227:
    		case 6225:
    		case 6223:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 3073:
    		case 5808:
    		case 7772:
    		case 7135:
    		case 13454:
    		case 13451:
    		case 5631:
    		case 13452:
    		case 7643:
    		case 6248:
    		case 1158:
    		return -1;
    		
    			case 50:
    			case 2881:
    			case 2882:
    			case 2883:
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2561:
    			case 2562:
    			case 2563:
    			case 2564:
    			case 2550:
    			case 2551:
    			case 2552:
    			case 2553:
    			return 100;
    			case 6150:
    			case 6151:
    			case 6152:
    			case 6153:
    			return 500;
    			default:
    			return 25;
    		}
    	}
    	
    	
    	
    	
    	public void newNPC(int npcType, int x, int y, int heightLevel, int WalkingType, int HP, int maxHit, int attack, int defence) {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 1; i < maxNPCs; i++) {
    			if (npcs[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    
    		if(slot == -1) return;		// no free slot found
    
    		NPC newNPC = new NPC(slot, npcType);
    		newNPC.absX = x;
    		newNPC.absY = y;
    		newNPC.makeX = x;
    		newNPC.makeY = y;
    		newNPC.heightLevel = heightLevel;
    		newNPC.walkingType = WalkingType;
    		newNPC.HP = HP;
    		newNPC.MaxHP = HP;
    		newNPC.maxHit = maxHit;
    		newNPC.attack = attack;
    		newNPC.defence = defence;
    		npcs[slot] = newNPC;
    	}
    
    	public void newNPCList(int npcType, String npcName, int combat, int HP) {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 0; i < maxListedNPCs; i++) {
    			if (NpcList[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    
    		if(slot == -1) return;		// no free slot found
    
    		NPCList newNPCList = new NPCList(npcType);
    		newNPCList.npcName = npcName;
    		newNPCList.npcCombat = combat;
    		newNPCList.npcHealth = HP;
    		NpcList[slot] = newNPCList;
    	}
    
    	public void handleClipping(int i) {
    		NPC npc = npcs[i];
    			if(npc.moveX == 1 && npc.moveY == 1) {
    					if((Region.getClipping(npc.absX + 1, npc.absY + 1, npc.heightLevel) & 0x12801e0) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0)
    								npc.moveY = 1;
    							else 
    								npc.moveX = 1; 				
    							}
    					} else if(npc.moveX == -1 && npc.moveY == -1) {
    						if((Region.getClipping(npc.absX - 1, npc.absY - 1, npc.heightLevel) & 0x128010e) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0)
    								npc.moveY = -1;
    							else
    								npc.moveX = -1; 		
    					}
    					} else if(npc.moveX == 1 && npc.moveY == -1) {
    							if((Region.getClipping(npc.absX + 1, npc.absY - 1, npc.heightLevel) & 0x1280183) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) == 0)
    								npc.moveY = -1;
    							else
    								npc.moveX = 1; 
    							}
    					} else if(npc.moveX == -1 && npc.moveY == 1) {
    						if((Region.getClipping(npc.absX - 1, npc.absY + 1, npc.heightLevel) & 0x128013) != 0)  {
    							npc.moveX = 0; npc.moveY = 0;
    							if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) == 0)
    								npc.moveY = 1;
    							else
    								npc.moveX = -1; 
    										}
    					} //Checking Diagonal movement. 
    					
    			if (npc.moveY == -1 ) {
    				if ((Region.getClipping(npc.absX, npc.absY - 1, npc.heightLevel) & 0x1280102) != 0)
                        npc.moveY = 0;
    			} else if( npc.moveY == 1) {
    				if((Region.getClipping(npc.absX, npc.absY + 1, npc.heightLevel) & 0x1280120) != 0)
    					npc.moveY = 0;
    			} //Checking Y movement.
    			if(npc.moveX == 1) {
    				if((Region.getClipping(npc.absX + 1, npc.absY, npc.heightLevel) & 0x1280180) != 0) 
    					npc.moveX = 0;
    				} else if(npc.moveX == -1) {
    				 if((Region.getClipping(npc.absX - 1, npc.absY, npc.heightLevel) & 0x1280108) != 0)
    					npc.moveX = 0;
    			} //Checking X movement.
    	}	
    
    	
    	
    		public void process() {	
    		for (int i = 0; i < maxNPCs; i++) {
    			if (npcs[i] == null) continue;
    			npcs[i].clearUpdateFlags();
    		}		
                    
    		for (int i = 0; i < maxNPCs; i++) {
    			if (npcs[i] != null) {
    				if (npcs[i].actionTimer > 0) {
    					npcs[i].actionTimer--;
    				}
    
    /*
                                    if(npcs[i].npcType == 945) {
                                            npcs[i].forcedText = "Hello there, you should go to www.sabsabionline.com!";
    		                        npcs[i].forcedChatRequired = true;
    		                        npcs[i].updateRequired = true;
    				}*/
    				
    				if (npcs[i].freezeTimer > 0) {
    					npcs[i].freezeTimer--;
    				}
    				
    				if (npcs[i].hitDelayTimer > 0) {
    					npcs[i].hitDelayTimer--;
    				}
    				
    				if (npcs[i].hitDelayTimer == 1) {
    					npcs[i].hitDelayTimer = 0;
    					applyDamage(i);
    				}
    				
    				if(npcs[i].attackTimer > 0) {
    					npcs[i].attackTimer--;
    				}
    					
    				if(npcs[i].spawnedBy > 0) { // delete summons npc
    					if(Server.playerHandler.players[npcs[i].spawnedBy] == null
    					|| Server.playerHandler.players[npcs[i].spawnedBy].heightLevel != npcs[i].heightLevel	
    					|| Server.playerHandler.players[npcs[i].spawnedBy].respawnTimer > 0 
    					|| !Server.playerHandler.players[npcs[i].spawnedBy].goodDistance(npcs[i].getX(), npcs[i].getY(), Server.playerHandler.players[npcs[i].spawnedBy].getX(), Server.playerHandler.players[npcs[i].spawnedBy].getY(), 20)) {
    							
    						if(Server.playerHandler.players[npcs[i].spawnedBy] != null) {
    							for(int o = 0; o < Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs.length; o++){
    								if(npcs[i].npcType == Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][0]) {
    									if (Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] == 1)
    										Server.playerHandler.players[npcs[i].spawnedBy].barrowsNpcs[o][1] = 0;
    								}
    							}
    						}
    						npcs[i] = null;
    					}
    				}
    				if (npcs[i] == null) continue;
    				if (npcs[i].lastX != npcs[i].getX()
    						|| npcs[i].lastY != npcs[i].getY()) {
    					npcs[i].lastX = npcs[i].getX();
    					npcs[i].lastY = npcs[i].getY();
    				}	
    				
    				/**
    				* Attacking player
    				**/
    				if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer(i);
    				} else if (isAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer(i);
    				} else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && !switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer1(i);
    					} else if (isReallyAggressive(i) && !npcs[i].underAttack && !npcs[i].isDead && switchesAttackers(i)) {
    					npcs[i].killerId = getCloseRandomPlayer1(i);
    					}
    				if (System.currentTimeMillis() - npcs[i].lastDamageTaken > 5000)
    					npcs[i].underAttackBy = 0;
    				
    				if((npcs[i].killerId > 0 || npcs[i].underAttack) && !npcs[i].walkingHome && retaliates(npcs[i].npcType)) {
    					if(!npcs[i].isDead) {
    						int p = npcs[i].killerId;
    						if(Server.playerHandler.players[p] != null) {
    							Client c = (Client) Server.playerHandler.players[p];
                                                            followPlayer(i, c.playerId);				
    							if (npcs[i] == null) continue;
    							if(npcs[i].attackTimer == 0) {
    								if(c != null) {
    									attackPlayer(c, i);
    								} else {
    									npcs[i].killerId = 0;
    									npcs[i].underAttack = false;
    									npcs[i].facePlayer(0);
    								}
    							}
    						} else {
    							npcs[i].killerId = 0;
    							npcs[i].underAttack = false;
    							npcs[i].facePlayer(0);
    						}
    					}
    				}
    				
    				
    		
    				/**
    				* Random walking and walking home
    				**/
    				if (npcs[i] == null) continue;
    				if((!npcs[i].underAttack || npcs[i].walkingHome) && npcs[i].randomWalk && !npcs[i].isDead) {
    					npcs[i].facePlayer(0);
    					npcs[i].killerId = 0;	
    					if(npcs[i].spawnedBy == 0) {
    						if((npcs[i].absX > npcs[i].makeX + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absX < npcs[i].makeX - Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY > npcs[i].makeY + Config.NPC_RANDOM_WALK_DISTANCE) || (npcs[i].absY < npcs[i].makeY - Config.NPC_RANDOM_WALK_DISTANCE)) {
    							npcs[i].walkingHome = true;
    						}
    					}
    
    					if (npcs[i].walkingHome && npcs[i].absX == npcs[i].makeX && npcs[i].absY == npcs[i].makeY) {
    						npcs[i].walkingHome = false;
    					} else if(npcs[i].walkingHome) {
    						npcs[i].moveX = GetMove(npcs[i].absX, npcs[i].makeX);
    			      		npcs[i].moveY = GetMove(npcs[i].absY, npcs[i].makeY);
    						handleClipping(i);
    						npcs[i].getNextNPCMovement(i); 
    						npcs[i].updateRequired = true;
    					}
                        if (npcs[i].walkingType >= 0) {
                            switch(npcs[i].walkingType) {
    
                            case 5:
                                    npcs[i].turnNpc(npcs[i].absX-1, npcs[i].absY);
                                    break;
    
                            case 4:
                                    npcs[i].turnNpc(npcs[i].absX+1, npcs[i].absY);
                                    break;
    
                            case 3:
                                    npcs[i].turnNpc(npcs[i].absX, npcs[i].absY-1);
                                    break;
                            case 2:
                                    npcs[i].turnNpc(npcs[i].absX, npcs[i].absY+1);
                                    break;
    
                            default:
                                    if (npcs[i].walkingType >= 0) {
                                            npcs[i].turnNpc(npcs[i].absX, npcs[i].absY); //makes it when npcs move they dont turn back to one direction
                                    }
                                    break;
                            }
                    }
    					if(npcs[i].walkingType == 1) {
    						if(Misc.random(3)== 1 && !npcs[i].walkingHome) {
    							int MoveX = 0;
    							int MoveY = 0;			
    							int Rnd = Misc.random(9);
    							if (Rnd == 1) {
    								MoveX = 1;
    								MoveY = 1;
    							} else if (Rnd == 2) {
    								MoveX = -1;
    							} else if (Rnd == 3) {
    								MoveY = -1;
    							} else if (Rnd == 4) {
    								MoveX = 1;
    							} else if (Rnd == 5) {
    								MoveY = 1;
    							} else if (Rnd == 6) {
    								MoveX = -1;
    								MoveY = -1;
    							} else if (Rnd == 7) {
    								MoveX = -1;
    								MoveY = 1;
    							} else if (Rnd == 8) {
    								MoveX = 1;
    								MoveY = -1;
    							}
    										
    							if (MoveX == 1) {
    								if (npcs[i].absX + MoveX < npcs[i].makeX + 1) {
    									npcs[i].moveX = MoveX;
    								} else {
    									npcs[i].moveX = 0;
    								}
    							}
    							
    							if (MoveX == -1) {
    								if (npcs[i].absX - MoveX > npcs[i].makeX - 1)  {
    									npcs[i].moveX = MoveX;
    								} else {
    									npcs[i].moveX = 0;
    								}
    							}
    							
    							if(MoveY == 1) {
    								if(npcs[i].absY + MoveY < npcs[i].makeY + 1) {
    									npcs[i].moveY = MoveY;
    								} else {
    									npcs[i].moveY = 0;
    								}
    							}
    							
    							if(MoveY == -1) {
    								if(npcs[i].absY - MoveY > npcs[i].makeY - 1)  {
    									npcs[i].moveY = MoveY;
    								} else {
    									npcs[i].moveY = 0;
    								}
    							}
    								
    
    							int x = (npcs[i].absX + npcs[i].moveX);
    							int y = (npcs[i].absY + npcs[i].moveY);
    							//if (VirtualWorld.I(npcs[i].heightLevel, npcs[i].absX, npcs[i].absY, x, y, 0))
    								handleClipping(i);
    								npcs[i].getNextNPCMovement(i);
    							//else
    							//{
    								//npcs[i].moveX = 0;
    								//npcs[i].moveY = 0;
    							//} 
    							npcs[i].updateRequired = true;
    						}
    					}
    				}
    		
    				
    				if (npcs[i].isDead == true) {
    					if (npcs[i].actionTimer == 0 && npcs[i].applyDead == false && npcs[i].needRespawn == false) {
    						npcs[i].updateRequired = true;
    						npcs[i].facePlayer(0);
    						npcs[i].killedBy = getNpcKillerId(i);
    						npcs[i].animNumber = getDeadEmote(i); // dead emote
    						npcs[i].animUpdateRequired = true;
    						npcs[i].freezeTimer = 0;
    						npcs[i].applyDead = true;
    						killedBarrow(i);
    						npcs[i].actionTimer = 4; // delete time
    						resetPlayersInCombat(i);
    						npcs[i].dagColor = "";
    						getDtLastKill(i);
    					} else if (npcs[i].actionTimer == 0 && npcs[i].applyDead == true &&  npcs[i].needRespawn == false) {						
    						npcs[i].needRespawn = true;
    						npcs[i].actionTimer = getRespawnTime(i); // respawn time
    						dropItems(i); // npc drops items!
    						appendSlayerExperience(i);
    						tzhaarDeathHandler(i);
    						if (npcs[i].npcType == 2745) {
    							handleJadDeath(i);
    						}
    						appendZamorakKC(i);
    						appendBandosKC(i);
    						appendSaradominKC(i);
    						appendArmadylKC(i);
    						appendKillCount(i);
    						//appendJailKc(i);
    						npcs[i].absX = npcs[i].makeX;
    						npcs[i].absY = npcs[i].makeY;				
    						npcs[i].HP = npcs[i].MaxHP;
    						npcs[i].animNumber = 0x328;
    						npcs[i].updateRequired = true;
    						npcs[i].animUpdateRequired = true;
    						if (npcs[i].npcType >= 2440 && npcs[i].npcType <= 2446) {
    							Server.objectManager.removeObject(npcs[i].absX, npcs[i].absY);
    						}
    						if (npcs[i].npcType == 2745) {
    							//handleJadDeath(i);
    						}
    					} else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn == true && npcs[i].npcType != 1158) {					
    						Client player = (Client) Server.playerHandler.players[npcs[i].spawnedBy];
    						if(player != null) {
    							checkDt(i);
    							checkHfd(i);
    							checkRfd(i);
    							npcs[i] = null;				
    					} else if (npcs[i].actionTimer == 0 && npcs[i].needRespawn) {
    						if (npcs[i].spawnedBy > 0) {
    							npcs[i] = null;
    						} else {
    						if (npcs[i].npcType == 6260) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6265, 2868, 5364, 2, 1, 146, 23, 120,
    									120);
    							newNPC(6263, 2870, 5356, 2, 1, 127, 23, 150,
    									90);
    							newNPC(6261, 2873, 5366, 2, 1, 126, 22, 100,
    									110);
    						} else if (npcs[i].npcType == 6222) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss1()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6227, 2828, 5299, 2, 1, 146, 23, 120,
    									120);
    							newNPC(6225, 2838, 5305, 2, 1, 127, 20, 150,
    									90);
    							newNPC(6223, 2835, 5299, 2, 1, 126, 19, 100,
    									110);
    						} else if (npcs[i].npcType == 6203) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss2()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6206, 2921, 5328, 2, 1, 146, 23, 120,
    									120);
    							newNPC(6204, 2928, 5328, 2, 1, 127, 20, 150,
    									90);
    							newNPC(6208, 2932, 5321, 2, 1, 126, 19, 100,
    									110);
    						} else if (npcs[i].npcType == 6247) {
    							Player c22 = PlayerHandler.players[npcs[i].killedBy];
    							for (NPC n : NPCHandler.npcs) {
    								if (n != null && n.inGodWarsBoss3()) {
    									if (n.spawnedBy <= 0) {
    										n.isDead = true;
    										n.applyDead = true;
    										n.updateRequired = true;
    									}
    								}
    							}
    							newNPC(6252, 2901, 5261, 0, 1, 146, 23, 120,
    									120);
    							newNPC(6250, 2901, 5269, 0, 1, 127, 20, 150,
    									90);
    							newNPC(6248, 2892, 5268, 0, 1, 126, 19, 100,
    									110);
    						}
    							int old1 = npcs[i].npcType;
    							int old2 = npcs[i].makeX;
    							int old3 = npcs[i].makeY;
    							int old4 = npcs[i].heightLevel;
    							int old5 = npcs[i].walkingType;
    							int old6 = npcs[i].MaxHP;
    							int old7 = npcs[i].maxHit;
    							int old8 = npcs[i].attack;	
    							int old9 = npcs[i].defence;
    							npcs[i] = null;
    							newNPC(old1, old2, old3, old4, old5, old6, old7, old8, old9);
    						}
    					}
    				}
    			}
    		}
    		}
    		}
    		
    		
    	public boolean getsPulled(int i) {
    		switch (npcs[i].npcType) {
    			case 6560:
    				if (npcs[i].firstAttacker > 0)
    					return false;
    			break;
    		}
    		return true;
    	}
    	   
    	public boolean multiAttacks(int i) {
    		switch (npcs[i].npcType) {
    		 case 1158: //kq
    				if (npcs[i].attackType == 2)
    				return true;
    			case 1160: //kq
    				if (npcs[i].attackType == 1)
    				return true;
    			case 2558:
    			return true;
    			case 2562:
    			if (npcs[i].attackType == 2)
    				return true;
    			case 2550:
    			if (npcs[i].attackType == 1)
    				return true;
    			default:
    			return false;
    		}
    	
    	
    	}
    	
    	/**
    	* Npc killer id?
    	**/
    	
    	public int getNpcKillerId(int npcId) {
    		int oldDamage = 0;
    		int count = 0;
    		int killerId = 0;
    		for (int p = 1; p < Config.MAX_PLAYERS; p++)  {	
    			if (Server.playerHandler.players[p] != null) {
    				if(Server.playerHandler.players[p].lastNpcAttacked == npcId) {
    					if(Server.playerHandler.players[p].totalDamageDealt > oldDamage) {
    						oldDamage = Server.playerHandler.players[p].totalDamageDealt;
    						killerId = p;
    					}
    					Server.playerHandler.players[p].totalDamageDealt = 0;
    				}	
    			}
    		}				
    		return killerId;
    	}
    		
    	/**
    	 * 
    	 */
    	private void killedBarrow(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			for(int o = 0; o < c.barrowsNpcs.length; o++){
    				if(npcs[i].npcType == c.barrowsNpcs[o][0]) {
    					c.barrowsNpcs[o][1] = 2; // 2 for dead
    					c.barrowsKillCount++;
    				}
    			}
    		}
    	}
    	
    	private void tzhaarDeathHandler(int i) {
    		if (isFightCaveNpc(i) && npcs[i].npcType != FightCaves.TZ_KEK)
    			killedTzhaar(i);
    		if(npcs[i].npcType == FightCaves.TZ_KEK_SPAWN) {
    			int p = npcs[i].killerId;
    			if (PlayerHandler.players[p] != null) {
    				Client c = (Client) PlayerHandler.players[p];
    				c.tzKekSpawn += 1;
    				if(c.tzKekSpawn == 2) {
    					killedTzhaar(i);
    					c.tzKekSpawn = 0;
    				}
    			}
    		}
    		
    		if(npcs[i].npcType == FightCaves.TZ_KEK) {
    			int p = npcs[i].killerId;
    			if (PlayerHandler.players[p] != null) {
    				Client c = (Client) PlayerHandler.players[p];
    				FightCaves.tzKekEffect(c, i);
    			}
    		}
    	}
    	
    	private void killedTzhaar(int i) {
    		final Client c2 = (Client) PlayerHandler.players[npcs[i].spawnedBy];
    			c2.tzhaarKilled++;
    		if (c2.tzhaarKilled == c2.tzhaarToKill) {
    			c2.waveId++;
    			EventManager.getSingleton().addEvent(new Event() {
    				public void execute(EventContainer c) {
    					if (c2 != null) {
    						Server.fightCaves.spawnNextWave(c2);
    					}
    					c.stop();
    				}
    			}, 7500);
    
    		}
    	}	
    	public void handleJadDeath(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    		c.getItems().addItem(6570,1);
    		c.getDH().sendDialogues(69, 2617);
    		c.getPA().resetTzhaar();
    		c.waveId = 300;
    	}
    	
    	
    	/**
    	* Dropping Items!
    	**/
    	
    
    	public void dropItems(int i) {
    		int npc = 0;
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			if (npcs[i].npcType == 912 || npcs[i].npcType == 913 || npcs[i].npcType == 914)
    				c.magePoints += 1;
    			if(npcs[i].npcType == 4292 || npcs[i].npcType == 4291 && c.inCyclops) {
    				int random2 = Misc.random(4);
    				if(random2 == 1) {
    					Server.itemHandler.createGroundItem(c, Server.getWarriorsGuild().getCyclopsDrop(c), npcs[i].absX, npcs[i].absY, 1, c.playerId);
    				}
    			}
    			int[] animatedArmor = {4278, 4279, 4280, 4281, 4282, 4283, 4284};
    			int[] tokens = {10, 20, 30, 40, 50, 60, 70};
    			for(int f = 0; f < animatedArmor.length; f++) {
    				if (npcs[i].npcType == animatedArmor[f]) {
    					c.spawned = false;
    					Server.itemHandler.createGroundItem(c, 8851, npcs[i].absX, npcs[i].absY, tokens[f], c.playerId);
    				}
    			}
    			
    			for(npc = 0; npc < Config.NPC_DROPS.length; npc++){
    				if(npcs[i].npcType == Config.NPC_DROPS[npc][0]) {
    					if(Misc.random(Config.NPC_DROPS[npc][3]) == 0) {
    						if (c.clanId >= 0)
    							Server.clanChat.handleLootShare(c, Config.NPC_DROPS[npc][1], Config.NPC_DROPS[npc][2]);
    						Server.itemHandler.createGroundItem(c, Config.NPC_DROPS[npc][1], npcs[i].absX, npcs[i].absY, Config.NPC_DROPS[npc][2], c.playerId);
    					}
    				}
    			}
    		}
    	}
    	
    	public void appendKillCount(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			int[] kcMonsters = {};
    			for (int j : kcMonsters) {
    				if (npcs[i].npcType == j) {
    					if (c.killCount < 20) {
    						c.killCount++;
    						//c.sendMessage("Killcount: " + c.killCount);
    					} else {
    					//	c.sendMessage("You already have 20 kill count");
    					}
    					break;
    				}
    			}
    		}	
    	}
    	
    	
    	
    	
    	
    	//id of bones dropped by npcs
    	public int boneDrop(int type) {
    		switch (type) {
    			case 1://normal bones
    			case 9:
    			case 100:
    			case 12:
    			case 17:
    			case 803:
    			case 18:
    			case 81:
    			case 101:
    			case 41:
    			case 19:
    			case 90:
    			case 75:
    			case 86:
    			case 78:
    			case 912:
    			case 913:
    			case 914:
    			case 1648:
    			case 1643:
    			case 1618:
    			case 1624:
    			case 181:
    			case 119:
    			case 49:
    			case 26:
    			case 1341:
    			case 201:
    			return 526;
    			case 117:
    			return 532;//big bones
    			case 50://drags
    			case 53:
    			case 54:
    			case 55:
    			case 941:
    			case 1590:
    			case 1591:
    			case 1592:
    			return 536;
    			case 84:
    			case 1615:
    			case 1613:
    			case 82:
    			case 3200:
    			return 592;
    			case 2881:
    			case 2882:
    			case 2883:
    			return 6729;
    			default:
    			return -1;
    		}	
    	}
    
    	public int getStackedDropAmount(int itemId, int npcId) {
    		switch (itemId) {
    			case 995:
    				switch (npcId) {
    					case 1:
    					return 50+ Misc.random(50);
    					case 9:
    					return 133 + Misc.random(100);
    					case 1624:
    					return 1000 + Misc.random(300);
    					case 1618:
    					return 1000 + Misc.random(300);
    					case 1643:
    					return 1000 + Misc.random(300);
    					case 1610:
    					return 1000 + Misc.random(1000);
    					case 1613:
    					return 1500 + Misc.random(1250);
    					case 1615:
    					return 3000;
    					case 18:
    					return 500;
    					case 101:
    					return 60;
    					case 913:
    					case 912:
    					case 914:
    					return 750 + Misc.random(500);
    					case 1612:
    					return 250 + Misc.random(500);
    					case 1648:
    					return 250 + Misc.random(250);
    					case 90:
    					return 200;
    					case 82:
    					return 1000 + Misc.random(455);
    					case 52:
    					return 400 + Misc.random(200);
    					case 49:
    					return 1500 + Misc.random(2000);
    					case 1341:
    					return 1500 + Misc.random(500);
    					case 26:
    					return 500 + Misc.random(100);
    					case 20:
    					return 750 + Misc.random(100);
    					case 21: 
    					return 890 + Misc.random(125);
    					case 117:
    					return 500 + Misc.random(250);
    					case 2607:
    					return 500 + Misc.random(350);
    				}			
    			break;
    			case 11212:
    			return 10 + Misc.random(4);
    			case 565:
    			case 561:
    			return 10;
    			case 560:
    			case 563:
    			case 562:
    			return 15;
    			case 555:
    			case 554:
    			case 556:
    			case 557:
    			return 20;
    			case 892:
    			return 40;
    			case 886:
    			return 100;
    			case 6522:
    			return 6 + Misc.random(5);
    			
    		}
    	
    		return 1;
    	}
    	
        /**
         * Slayer Experience
         **/
        public void appendSlayerExperience(int i) {
            int npc = 0;
            Client c = (Client) PlayerHandler.players[npcs[i].killedBy];
            if (c != null) {
                if (c.getSlayer().isSlayerTask(npcs[i].npcType)) {
                    c.taskAmount--;
                    c.getPA().addSkillXP(npcs[i].MaxHP * Config.SLAYER_EXPERIENCE,
                            18);
                    if (c.taskAmount <= 0) {
                        c.getPA().addSkillXP(
                                (npcs[i].MaxHP * 8) * Config.SLAYER_EXPERIENCE, 18);
                        int points = c.getSlayer().getDifficulty(c.slayerTask) * 4;
                        c.slayerTask = -1;
                        c.slayerPoints += points;
                        c.sendMessage("You completed your slayer task. You obtain "
                                + points
                                + " slayer points. Please talk to Vanakka.");
                    }
                }
            }
        }
    	
    	/**
    	 *	Resets players in combat
    	 */
    	
    	public void resetPlayersInCombat(int i) {
    		for (int j = 0; j < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null)
    				if (Server.playerHandler.players[j].underAttackBy2 == i)
    					Server.playerHandler.players[j].underAttackBy2 = 0;
    		}
    	}
    	
    	/**
    	* Npc names
    	**/
    	
    	public String getNpcName(int npcId) {
    		for (int i = 0; i < maxNPCs; i++) {
    			if (Server.npcHandler.NpcList[i] != null) {
    				if (Server.npcHandler.NpcList[i].npcId == npcId) {
    					return Server.npcHandler.NpcList[i].npcName;
    				}
    			}
    		}
    		return "-1";
    	}
    	
    	/**
    	* Npc Follow Player
    	**/
    	
    	public int GetMove(int Place1,int Place2) { 
    		if ((Place1 - Place2) == 0) {
                return 0;
    		} else if ((Place1 - Place2) < 0) {
    			return 1;
    		} else if ((Place1 - Place2) > 0) {
    			return -1;
    		}
            	return 0;
       	 }
    	
    	public boolean followPlayer(int i) {
    		switch (npcs[i].npcType) {
    			case 2892:
    			case 2894:
    			return false;
    		}
    		return true;
    	}
    	
    	public void followPlayer(int i, int playerId) {
    		if (Server.playerHandler.players[playerId] == null) {
    			return;
    		}
    		if (Server.playerHandler.players[playerId].respawnTimer > 0) {
    			npcs[i].facePlayer(0);
    			npcs[i].randomWalk = true; 
    	      	npcs[i].underAttack = false;	
    			return;
    		}
    		
    		if (!followPlayer(i)) {
    			npcs[i].facePlayer(playerId);
    			return;
    		}
    		
    		int playerX = Server.playerHandler.players[playerId].absX;
    		int playerY = Server.playerHandler.players[playerId].absY;
    		npcs[i].randomWalk = false;
    		if (goodDistance(npcs[i].getX(), npcs[i].getY(), playerX, playerY, distanceRequired(i)))
    			return;
    		if((npcs[i].spawnedBy > 0) || ((npcs[i].absX < npcs[i].makeX + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absX > npcs[i].makeX - Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY < npcs[i].makeY + Config.NPC_FOLLOW_DISTANCE) && (npcs[i].absY > npcs[i].makeY - Config.NPC_FOLLOW_DISTANCE))) {
    			if(npcs[i].heightLevel == Server.playerHandler.players[playerId].heightLevel) {
    				if(Server.playerHandler.players[playerId] != null && npcs[i] != null) {
    					if(playerY < npcs[i].absY) {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerY > npcs[i].absY) {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerX < npcs[i].absX) {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerX > npcs[i].absX)  {
    						npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    						npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    					} else if(playerX == npcs[i].absX || playerY == npcs[i].absY) {
    						int o = Misc.random(3);
    						switch(o) {
    							case 0:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY+1);
    							break;
    							
    							case 1:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY-1);
    							break;
    							
    							case 2:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX+1);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    							break;
    							
    							case 3:
    							npcs[i].moveX = GetMove(npcs[i].absX, playerX-1);
    							npcs[i].moveY = GetMove(npcs[i].absY, playerY);
    							break;
    						}	
    					}
    					int x = (npcs[i].absX + npcs[i].moveX);
    					int y = (npcs[i].absY + npcs[i].moveY);
    					npcs[i].facePlayer(playerId);
    					//if (checkClipping(i))
    						handleClipping(i);
    						npcs[i].getNextNPCMovement(i);
    					/*else {
    						npcs[i].moveX = 0;
    						npcs[i].moveY = 0;
    					}*/
    					npcs[i].facePlayer(playerId);
    			      	npcs[i].updateRequired = true;
    				}	
    			}
    		} else {
    			npcs[i].facePlayer(0);
    			npcs[i].randomWalk = true; 
    		   	npcs[i].underAttack = false;	
    		}
    	}
    	
    	
    	/*public boolean checkClipping(int i) {
    		NPC npc = npcs[i];
    		int size = npcSize(i);
    		
    		for (int x = 0; x < size; x++) {
    			for (int y = 0; y < size; y++) {
    				if (!VirtualWorld.I(npc.heightLevel, npc.absX + x, npc.absY + y, npc.absX + npc.moveX, npc.absY + npc.moveY, 0))
    					return false;				
    			}
    		}
    		return true;
    	}*/
    	
    	/**
    	* load spell
    	**/
    	public void loadSpell2(int i) {
    		npcs[i].attackType = 3;
    		int random = Misc.random(3);
    		if (random == 0) {
    			npcs[i].projectileId = 393; //red
    			npcs[i].endGfx = 430;
    		} else if (random == 1) {
    			npcs[i].projectileId = 394; //green
    			npcs[i].endGfx = 429;
    		} else if (random == 2) {
    			npcs[i].projectileId = 395; //white
    			npcs[i].endGfx = 431;
    		} else if (random == 3) {
    			npcs[i].projectileId = 396; //blue
    			npcs[i].endGfx = 428;
    		}
    	}
    	
    	public void loadSpell(int i) {
    		 Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex];
    		int random;
    		switch(npcs[i].npcType) {
    		
    		case 1158://kq first form
    			int kqRandom = Misc.random(3);
    				if (kqRandom == 0) {
    					npcs[i].projectileId = 280;
    					npcs[i].attackType = 2;	
    					npcs[i].endGfx = 281;
    				} else if (kqRandom == 1) {
    					npcs[i].attackType = 1; // range
    					npcs[i].endGfx = 281;
    					npcs[i].projectileId = 473;
    				} else if (kqRandom == 2) {
    					npcs[i].attackType = 0; // melee
    					npcs[i].projectileId = -1;
    				}
    				break;
    			case 1160://kq secondform
    				int kqRandom2 = Misc.random(3);
    				if (kqRandom2 == 0) {					
    					npcs[i].projectileId = 280; //mage
    					npcs[i].endGfx = 281;
    					npcs[i].attackType = 2;
    				} else if (kqRandom2 == 1) {
    					npcs[i].attackType = 1; // range
    					npcs[i].endGfx = 281;
    					npcs[i].projectileId = 473;
    				} else if (kqRandom2 == 2) {
    					npcs[i].attackType = 0; // melee
    					npcs[i].projectileId = -1;
    				}
    				break;
    				
    	        case 53://Red Dragon
    	        case 54://Black dragon
    	        case 941://Green Dragon
    	        case 55:// Blue Dragon
    	        case 1590://Bronze Dragon
    	        case 1591://Iron Dragon
    	        case 1592:// Steal Dragon
    	        case 5362: //Brutal green
    				if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) {
    					random = Misc.random(2);//If the NPC is in a distance of 2 or less, use melee and range
    					} else {
    					random = (0);//else use range attack only.
    					}
    	        if (random == 0) {
    	            npcs[i].attackType = 2;
    	            npcs[i].projectileId = 393;
    	            npcs[i].endGfx = 430;
    	        } else if (random == 1) {
    				npcs[i].projectileId = -1; //melee
    				npcs[i].endGfx = -1;
    				npcs[i].attackType = 0;	
    	        }            
    	        break;
    				
    			case 6225:
    			case 6230:
    			case 6233:
    			case 6234:
    			case 6235:
    			case 6236:
    			case 6238:
    			case 6241:
    			case 6242:
    			case 6243:
    			case 6244:
    			case 6245:
    			case 2184:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 1190;
    				break;
    				
    			case 6229:
    			case 6232:
    			case 6239:
    			case 6237:
    			case 6240:
    			case 6246:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 35;
    				break;
    
    			case 1605:
    			case 1612:
    				npcs[i].attackType = 2;
    				break;
    				
    			case 6221:
    				npcs[i].attackType = 2;
    				npcs[i].endGfx = 78;
    				break;
    			case 1643:
    			case 6257:
    				npcs[i].attackType = 2;
    				npcs[i].endGfx = 76;
    				break;
    
    			case 6256:
    			case 6220:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 326;
    				break;
    				
    			case 2892:
    			npcs[i].projectileId = 94;
    			npcs[i].attackType = 2;
    			npcs[i].endGfx = 95;
    			break;
    			case 2894:
    			npcs[i].projectileId = 298;
    			npcs[i].attackType = 1;
    			break;
    			case 50:
    				if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].killerId].absX, Server.playerHandler.players[npcs[i].killerId].absY, 2)) {
    					random = Misc.random(4);//If the NPC is in a distance of 2 or less, use melee and range
    					} else {
    					random = Misc.random(3);//else use range attack only.
    					}
    			if (random == 0) {
    				npcs[i].projectileId = 393; //red
    				npcs[i].endGfx = 430;
    				npcs[i].attackType = 3;
    			} else if (random == 1) {
    				npcs[i].projectileId = 394; //green
    				npcs[i].endGfx = 429;
    				npcs[i].attackType = 3;
    			} else if (random == 2) {
    				npcs[i].projectileId = 395; //white
    				npcs[i].endGfx = 431;
    				npcs[i].attackType = 3;
    			} else if (random == 3) {
    				npcs[i].projectileId = 396; //blue
    				npcs[i].endGfx = 428;
    				npcs[i].attackType = 3;
                    if (c.freezeTimer <= 0) {
                    	c.freezeTimer = 30;
                    	c.frozenBy = c.playerId;
                        c.stopMovement();
                        c.sendMessage("You have been frozen.");
                    }
    			} else if (random == 4) {
    				npcs[i].projectileId = -1; //melee
    				npcs[i].endGfx = -1;
    				npcs[i].attackType = 0;				
    			}			
    			break;
    			case 6222:
    				npcs[i].kree = Misc.random(2);
    				switch (npcs[i].kree) {
    				case 0:
    					npcs[i].attackType = 2;
    					npcs[i].multiAttack = true;
    					npcs[i].projectileId = 1196;
    					break;
    				case 1:
    				case 2:
    					npcs[i].attackType = 1;
    					npcs[i].multiAttack = true;
    					npcs[i].projectileId = 1197;
    					break;
    				}
    				if (Misc.random(5) >= 3) {
    					npcs[i].forceChat(npcs[i].Kree());
    				}
    				break;
    			case 6250:
    				npcs[i].attackType = 2;
    				npcs[i].gfx0(1184);
    				npcs[i].projectileId = 1185;
    				npcs[i].endGfx = 1186;
    				break;
    				
    			case 6203:
    				if (Misc.random(5) >= 3) {
    					npcs[i].forceChat(npcs[i].Tsutsaroth());
    				}
    				switch (npcs[i].tsutsaroth) {
    				case 0:
    				case 1:
    				case 2:
    				case 3:
    					npcs[i].attackType = 0;
    					npcs[i].projectileId = -1;
    					break;
    				case 4:
    					npcs[i].attackType = 2;
    					npcs[i].multiAttack = true;
    					npcs[i].gfx0(1210);
    					npcs[i].projectileId = 1211;
    					break;
    				}
    				break;
    
    			case 6223:
    			case 6231:
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 1199;
    				break;
    				
    			case 6206:
    				npcs[i].attackType = 1;
    				npcs[i].gfx0(1208);
    				npcs[i].projectileId = 1209;
    				break;
    
    			case 6208:
    				npcs[i].attackType = 2;
    				npcs[i].gfx0(1212);
    				npcs[i].projectileId = 1213;
    				break;
    				
    
    			case 6263:
    				npcs[i].attackType = 2;
    				npcs[i].gfx0(1202);
    				npcs[i].projectileId = 1203;
    				npcs[i].endGfx = 1204;
    				break;
    				
    			case 6252:
    				npcs[i].attackType = 1;
    				npcs[i].gfx100(1187);
    				npcs[i].projectileId = 1188;
    				break;
    				
    			case 6265:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 1206;
    				break;
    				
    			case 6260:
    				switch (npcs[i].graardor) {
    				case 0:
    				case 1:
    				case 2:
    				case 3:
    				case 4:
    					if (Misc.random(5) >= 4) {
    						npcs[i].forceChat(npcs[i].Graardor());
    					}
    					npcs[i].attackType = 0;
    					npcs[i].projectileId = -1;
    					break;
    				case 5:
    					if (Misc.random(5) >= 3) {
    						npcs[i].forceChat(npcs[i].Graardor());
    					}
    					npcs[i].attackType = 1;
    					npcs[i].multiAttack = true;
    					npcs[i].gfx0(1219);
    					npcs[i].projectileId = 1200;
    					break;
    				}
    				break;
    
    			case 6247:
    				switch (npcs[i].zilyana) {
    				case 0:
    				case 1:
    				case 2:
    				case 3:
    					npcs[i].attackType = 0;
    					break;
    				case 4:
    				case 5:
    				case 6:
    					npcs[i].attackType = 2;
    					break;
    				}
    				break;
    			case 2551:
    				npcs[i].attackType = 0;
    			break;
    			case 2552:
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 1203;
    			break;
    			case 2553:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 1206;
    			break;
    			case 2025:
    			npcs[i].attackType = 2;
    			int r = Misc.random(3);
    			if(r == 0) {
    				npcs[i].gfx100(158);
    				npcs[i].projectileId = 159;
    				npcs[i].endGfx = 160;
    			}
    			if(r == 1) {
    				npcs[i].gfx100(161);
    				npcs[i].projectileId = 162;
    				npcs[i].endGfx = 163;
    			}
    			if(r == 2) {
    				npcs[i].gfx100(164);
    				npcs[i].projectileId = 165;
    				npcs[i].endGfx = 166;
    			}
    			if(r == 3) {
    				npcs[i].gfx100(155);
    				npcs[i].projectileId = 156;
    			}
    			break;
    			case 2881://supreme
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 298;
    			break;
    			
    			case 2882://prime
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 162;
    				npcs[i].endGfx = 477;
    			break;
    			
    			case 2028:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 27;
    			break;
    			
    			case 3200:
    			int r2 = Misc.random(1);
    			if (r2 == 0) {
    				npcs[i].attackType = 1;
    				npcs[i].gfx100(550);
    				npcs[i].projectileId = 551;
    				npcs[i].endGfx = 552;
    			} else {
    				npcs[i].attackType = 2;
    				npcs[i].gfx100(553);
    				npcs[i].projectileId = 554;
    				npcs[i].endGfx = 555;
    			}
    			break;
    			case 2745:
    			int r3 = 0;
    			if (goodDistance(npcs[i].absX, npcs[i].absY, Server.playerHandler.players[npcs[i].spawnedBy].absX, Server.playerHandler.players[npcs[i].spawnedBy].absY, 1))
    				r3 = Misc.random(2);
    			else
    				r3 = Misc.random(1);
    			if (r3 == 0) {
    				npcs[i].attackType = 2;
    				npcs[i].endGfx = 157;
    				npcs[i].projectileId = 448;
    			} else if (r3 == 1) {
    				npcs[i].attackType = 1;
    				npcs[i].endGfx = 451;
    				npcs[i].projectileId = -1;
    			} else if (r3 == 2) {
    				npcs[i].attackType = 0;
    				npcs[i].projectileId = -1;
    			}			
    			break;
    			case 2743:
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 445;
    				npcs[i].endGfx = 446;
    			break;
    			
    			case 2631:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 443;
    			break;
    		}
    	}
    		
    	/**
    	* Distanced required to attack
    	**/	
    	public int distanceRequired(int i) {
    		switch(npcs[i].npcType) {
    		case 6225:
    		case 6223:
    		case 6222:
    		case 1643:
    		case 6221:
    		case 6263:
    		case 6265:
    			return 8;
    			case 2025:
    			case 2028:
    			return 6;
    			case 50:
    				return 8;
    			case 2562:
    			return 2;
    			case 2881://dag kings
    			case 2882:
    			case 3200://chaos ele
    			case 2743:
    			case 2631:
    			case 2745:
    			return 8;
    			case 6261:
    			case 6227:
    			case 2883://rex
    			return 1;
    			case 2552:
    			case 2553:
    			case 2556:
    			case 2557:
    			case 2558:
    			case 2559:
    			case 2560:
    			case 2564:
    			case 2565:
    			return 9;
    			case 1590: // dragons
    			case 1591:
    			case 941:
    			case 48:
    			case 51:
    			case 52:
    			case 53:
    			case 1592:
    				return 3;
    			//things around dags
    			case 2892:
    			case 2894:
    			return 10;
    			default:
    			return 1;
    		}
    	}
    	
    	public int followDistance(int i) {
    		switch (npcs[i].npcType) {
    		case 6203:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6247:
    		case 6252:
    		case 6250:
    		case 6248:
    		case 6829:
    		case 6260:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 6223:
    		case 6225:
    		case 6227:
    		case 6222:
    		case 50:
    			return 20;
    			case 2550:
    			case 2551:
    			case 2562:
    			case 2563:
    			return 8;
    			case 2883:
    			return 4;
    			case 2881:
    			case 2882:
    				return 8;
    			case 941:
    			return 4;
    		
    		}
    		return 0;
    	}
    	
    	public int extraDistance(int i) {
    		switch (npcs[i].npcType) {
    		case 6203:
    		case 6208:
    		case 6204:
    		case 6206:
    		case 6247:
    		case 6252:
    		case 6250:
    		case 6248:
    		case 6260:
    		case 6265:
    		case 6263:
    		case 6261:
    		case 6223:
    		case 6225:
    		case 6227:
    		case 6222:
    			return 15;
    		default:
    			return 2;
    		}
    	}
    	
    	public int getProjectileSpeed(int i) {
    		switch(npcs[i].npcType) {
    		case 6222:
    		case 5637:
    			return 135;
    
    		case 6225:
    		case 6223:
    		case 6203:
    		case 2183:
    		case 2188:
    		case 2184:
    		case 6260:
    		case 6230:
    		case 6231:
    		case 6232:
    		case 6233:
    		case 6234:
    		case 6235:
    		case 6236:
    		case 6237:
    		case 6238:
    		case 6239:
    		case 6240:
    		case 6241:
    		case 6242:
    		case 6243:
    		case 6244:
    		case 6245:
    		case 6246:
    			return 120;
    
    		case 6208:
    		case 6265:
    		case 6263:
    		case 6021:
    		case 6006:
    		case 6007:
    		case 6008:
    		case 6017:
    		case 6018:
    		case 6019:
    		case 6020:
    			return 110;
    			case 2881:
    			case 2882:
    			case 3200:
    			return 85;
    			
    			case 2745:
    			return 130;
    			
    			case 50:
    			return 90;
    			
    			case 2025:
    			return 85;
    			
    			case 2028:
    			return 80;
    			
    			default:
    			return 85;
    		}
    	}
    	
    	/**
    	*NPC Attacking Player
    	**/
    	
    	public void attackPlayer(Client c, int i) {
    			if (npcs[i].lastX != npcs[i].getX()
    					|| npcs[i].lastY != npcs[i].getY()) {
    				return;
    			}	
    		if(npcs[i] != null) {
    			if (npcs[i].isDead)
    				return;
    			if (!npcs[i].inMulti() && npcs[i].underAttackBy > 0 && npcs[i].underAttackBy != c.playerId) {
    				npcs[i].killerId = 0;
    				return;
    			}
    			if (!npcs[i].inMulti() && (c.underAttackBy > 0 || (c.underAttackBy2 > 0 && c.underAttackBy2 != i))) {
    				npcs[i].killerId = 0;
    				return;
    			}
    			if (npcs[i].heightLevel != c.heightLevel) {
    				npcs[i].killerId = 0;
    				return;
    			}
    			npcs[i].facePlayer(c.playerId);
    			boolean special = false;//specialCase(c,i);
    			if(goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i)) || special) {
    				if(c.respawnTimer <= 0) {
    					npcs[i].facePlayer(c.playerId);
    					npcs[i].attackTimer = getNpcDelay(i);
    					npcs[i].hitDelayTimer = getHitDelay(i);
    					npcs[i].attackType = 0;
    					if (special)
    						loadSpell2(i);
    					else
    						loadSpell(i);
    					if (npcs[i].attackType == 3)
    						npcs[i].hitDelayTimer += 2;
    					if (multiAttacks(i)) {
    						multiAttackGfx(i, npcs[i].projectileId);
    						startAnimation(getAttackEmote(i), i);
    						npcs[i].oldIndex = c.playerId;
    						return;
    					}
    					if(npcs[i].projectileId > 0) {
    						int nX = Server.npcHandler.npcs[i].getX() + offset(i);
    						int nY = Server.npcHandler.npcs[i].getY() + offset(i);
    						int pX = c.getX();
    						int pY = c.getY();
    						int offX = (nY - pY)* -1;
    						int offY = (nX - pX)* -1;
    						c.getPA().createPlayersProjectile(nX, nY, offX, offY, 50, getProjectileSpeed(i), npcs[i].projectileId, 43, 31, -c.getId() - 1, 65);
    					}
    					c.underAttackBy2 = i;
    					c.singleCombatDelay2 = System.currentTimeMillis();
    					npcs[i].oldIndex = c.playerId;
    					startAnimation(getAttackEmote(i), i);
    					c.getPA().removeAllWindows();
    				} 
    			}			
    		}
    	}
    	
    	public int offset(int i) {
    		switch (npcs[i].npcType) {
    			case 50:
    			return 2;
    			case 2881:
    			case 2882:
    			return 1;
    			case 2745:
    			case 2743:
    			return 1;		
    		}
    		return 0;
    	}
    	
    	public boolean specialCase(Client c, int i) { //responsible for npcs that much 
    		if (goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), 8) && !goodDistance(npcs[i].getX(), npcs[i].getY(), c.getX(), c.getY(), distanceRequired(i)))
    			return true;
    		return false;
    	}
    	
    	public boolean retaliates(int npcType) {
    		return npcType < 3777 || npcType > 3780 && !(npcType >= 2440 && npcType <= 2446);
    	}
    	
    	public void applyDamage(int i) {
    		if(npcs[i] != null) {
    			if(Server.playerHandler.players[npcs[i].oldIndex] == null) {
    				return;
    			}
    			if (npcs[i].isDead)
    				return;
    			Client c = (Client) Server.playerHandler.players[npcs[i].oldIndex];
    			if (multiAttacks(i)) {
    				multiAttackDamage(i);
    				return;
    			}
    			if (c.playerIndex <= 0 && c.npcIndex <= 0)
    				if (c.autoRet == 1)
    					c.npcIndex = i;
    			if(c.attackTimer <= 3 || c.attackTimer == 0 && c.npcIndex == 0 && c.oldNpcIndex == 0) {
    				c.startAnimation(c.getCombat().getBlockEmote());
    			}
    			if(c.respawnTimer <= 0) {	
    				int damage = 0;
    				if(npcs[i].attackType == 0) {
    					damage = Misc.random(npcs[i].maxHit);
    					if (10 + Misc.random(c.getCombat().calculateMeleeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) {
    						damage = 0;
    					}					
    					if(c.prayerActive[18]) { 	
    					 if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) 
    					damage = (damage / 2);
    					else
    					damage = 0;		
    					}
    				}
    					if (c.playerLevel[3] - damage < 0) { 
    						damage = c.playerLevel[3];
    					}
    			
    				if(npcs[i].attackType == 1) { // range
    					damage = Misc.random(npcs[i].maxHit);
    					if (10 + Misc.random(c.getCombat().calculateRangeDefence()) > Misc.random(Server.npcHandler.npcs[i].attack)) {
    						damage = 0;
    					}					
    					if(c.prayerActive[17]) { // protect from range
    						damage = 0;
    					}				
    					if (c.playerLevel[3] - damage < 0) { 
    						damage = c.playerLevel[3];
    					}
    				}
    				
    				if(npcs[i].attackType == 2) { // magic
    					damage = Misc.random(npcs[i].maxHit);
    					boolean magicFailed = false;
    					if (10 + Misc.random(c.getCombat().mageDef()) > Misc.random(Server.npcHandler.npcs[i].attack)) {
    						damage = 0;
    						magicFailed = true;
    					}				
    					if (c.playerLevel[3] - damage < 0) { 
    						damage = c.playerLevel[3];
    					}
    					if(npcs[i].endGfx > 0 && (!magicFailed || isFightCaveNpc(i))) {
    						c.gfx100(npcs[i].endGfx);
    					} else {
    						c.gfx100(85);
    					}
    					if(c.prayerActive[16]) { // protect from magic
    						 if (npcs[i].npcType == 1158) 
    						damage = (damage / 2);
    						else
    						damage = 0;
    						magicFailed = true;	
    					}
    				}
    			
    				if (npcs[i].attackType == 3) { //fire breath
    					int anti = c.getPA().antiFire();
    					if (anti == 0) {
    						damage = Misc.random(30) + 10;
    						c.sendMessage("You are badly burnt by the dragon fire!");
    					} else if (anti == 1)
    						damage = Misc.random(20);
    					else if (anti == 2)
    						damage = Misc.random(5);
    					if (c.playerLevel[3] - damage < 0)
    						damage = c.playerLevel[3];
    					c.gfx100(npcs[i].endGfx);
    				}
    				handleSpecialEffects(c, i, damage);
    				c.logoutDelay = System.currentTimeMillis(); // logout delay
    				//c.setHitDiff(damage);
    				c.handleHitMask(damage);
    				c.playerLevel[3] -= damage;
    				c.getPA().refreshSkill(3);
    				FightCaves.tzKihEffect(c, i, damage);
    				c.updateRequired = true;
    				//c.setHitUpdateRequired(true);	
    			}
    		}
    	}
    	
    	public void handleSpecialEffects(Client c, int i, int damage) {
    		if (npcs[i].npcType == 2892 || npcs[i].npcType == 2894) {
    		 if (npcs[i].npcType == 1158 || npcs[i].npcType == 1160) {
    			if (damage > 0) {
    				if (c != null) {
    					if (c.playerLevel[5] > 0) {
    						c.playerLevel[5]--;
    						c.getPA().refreshSkill(5);
    						c.getPA().appendPoison(12);
    					}
    				}			
    			}	
    		}
    		}
    	}
    		
    	public NPC[] getNPCs() {
    		return npcs;
    	}	
    
    	public static void startAnimation(int animId, int i) {
    		npcs[i].animNumber = animId;
    		npcs[i].animUpdateRequired = true;
    		npcs[i].updateRequired = true;
    	}
    	
    	public boolean goodDistance(int objectX, int objectY, int playerX, int playerY, int distance) {
    		return ((objectX-playerX <= distance && objectX-playerX >= -distance) && (objectY-playerY <= distance && objectY-playerY >= -distance));
    	}
    	
          
    	public int getMaxHit(int i) {
    		switch (npcs[i].npcType) {
    		case 1158:
    			if (npcs[i].attackType == 2)
    			return 30;
    			else
    			return 30;
    			case 2558:
    				if (npcs[i].attackType == 2)
    					return 28;
    				else
    					return 68;
    			case 2562:
    				return 31;
    			case 2550:
    				return 36;
    		}
    		return 1;
    	}
    	
    	
    	public boolean loadAutoSpawn(String FileName) {
    		String line = "";
    		String token = "";
    		String token2 = "";
    		String token2_2 = "";
    		String[] token3 = new String[10];
    		boolean EndOfFile = false;
    		int ReadMode = 0;
    		BufferedReader characterfile = null;
    		try {
    			characterfile = new BufferedReader(new FileReader("./"+FileName));
    		} catch(FileNotFoundException fileex) {
    			Misc.println(FileName+": file not found.");
    			return false;
    		}
    		try {
    			line = characterfile.readLine();
    		} catch(IOException ioexception) {
    			Misc.println(FileName+": error loading file.");
    			return false;
    		}
    		while(EndOfFile == false && line != null) {
    			line = line.trim();
    			int spot = line.indexOf("=");
    			if (spot > -1) {
    				token = line.substring(0, spot);
    				token = token.trim();
    				token2 = line.substring(spot + 1);
    				token2 = token2.trim();
    				token2_2 = token2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token3 = token2_2.split("\t");
    				if (token.equals("spawn")) {
    					newNPC(Integer.parseInt(token3[0]), Integer.parseInt(token3[1]), Integer.parseInt(token3[2]), Integer.parseInt(token3[3]), Integer.parseInt(token3[4]), getNpcListHP(Integer.parseInt(token3[0])), Integer.parseInt(token3[5]), Integer.parseInt(token3[6]), Integer.parseInt(token3[7]));
    				
    				}
    			} else {
    				if (line.equals("[ENDOFSPAWNLIST]")) {
    					try { characterfile.close(); } catch(IOException ioexception) { }
    					return true;
    				}
    			}
    			try {
    				line = characterfile.readLine();
    			} catch(IOException ioexception1) { EndOfFile = true; }
    		}
    		try { characterfile.close(); } catch(IOException ioexception) { }
    		return false;
    	}
    
    	public int getNpcListHP(int npcId) {
    		for (int i = 0; i < maxListedNPCs; i++) {
    			if (NpcList[i] != null) {
    				if (NpcList[i].npcId == npcId) {
    					return NpcList[i].npcHealth;
    				}
    			}
    		}
    		return 0;
    	}
    	
    	public String getNpcListName(int npcId) {
    		for (int i = 0; i < maxListedNPCs; i++) {
    			if (NpcList[i] != null) {
    				if (NpcList[i].npcId == npcId) {
    					return NpcList[i].npcName;
    				}
    			}
    		}
    		return "nothing";
    	}
    
    	public boolean loadNPCList(String FileName) {
    		String line = "";
    		String token = "";
    		String token2 = "";
    		String token2_2 = "";
    		String[] token3 = new String[10];
    		boolean EndOfFile = false;
    		int ReadMode = 0;
    		BufferedReader characterfile = null;
    		try {
    			characterfile = new BufferedReader(new FileReader("./"+FileName));
    		} catch(FileNotFoundException fileex) {
    			Misc.println(FileName+": file not found.");
    			return false;
    		}
    		try {
    			line = characterfile.readLine();
    		} catch(IOException ioexception) {
    			Misc.println(FileName+": error loading file.");
    			return false;
    		}
    		while(EndOfFile == false && line != null) {
    			line = line.trim();
    			int spot = line.indexOf("=");
    			if (spot > -1) {
    				token = line.substring(0, spot);
    				token = token.trim();
    				token2 = line.substring(spot + 1);
    				token2 = token2.trim();
    				token2_2 = token2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token2_2 = token2_2.replaceAll("\t\t", "\t");
    				token3 = token2_2.split("\t");
    				if (token.equals("npc")) {
    					newNPCList(Integer.parseInt(token3[0]), token3[1], Integer.parseInt(token3[2]), Integer.parseInt(token3[3]));
    				}
    			} else {
    				if (line.equals("[ENDOFNPCLIST]")) {
    					try { characterfile.close(); } catch(IOException ioexception) { }
    					return true;
    				}
    			}
    			try {
    				line = characterfile.readLine();
    			} catch(IOException ioexception1) { EndOfFile = true; }
    		}
    		try { characterfile.close(); } catch(IOException ioexception) { }
    		return false;
    	}
    	
    
    }
    Reply With Quote  
     

Page 1 of 2 12 LastLast

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. Replies: 10
    Last Post: 09-25-2013, 06:20 AM
  2. Could anyone help me with allstar Modicons?
    By rockarocka in forum Help
    Replies: 0
    Last Post: 06-01-2013, 05:58 PM
  3. could anyone help me trying to make a php page like this
    By oblivion742 in forum Application Development
    Replies: 1
    Last Post: 04-29-2013, 09:31 PM
  4. Could anyone help me add a new model header?
    By Sillhouette in forum Models
    Replies: 3
    Last Post: 12-27-2011, 12:00 AM
  5. Replies: 4
    Last Post: 12-16-2010, 12:12 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
  •