Thread: [pi] jad/ error --- [pi]

Page 1 of 2 12 LastLast
Results 1 to 10 of 18
  1. #1 [pi] jad/ error --- [pi] 
    Banned

    Join Date
    Sep 2009
    Posts
    904
    Thanks given
    139
    Thanks received
    55
    Rep Power
    0
    Ok ,this is fucked up, when i killed jad, once hes 0 hp, the server dcs and the cmd says




    Code:
    [20/09/11 6:38 PM]: [REGISTERED]: Harman
    [20/09/11 6:39 PM]: java.lang.NullPointerException
    [20/09/11 6:39 PM]:     at server.model.npcs.NPCHandler.killedTzhaar(NPCHandler.
    java:1208)
    [20/09/11 6:39 PM]:     at server.model.npcs.NPCHandler.process(NPCHandler.java:
    1086)
    [20/09/11 6:39 PM]:     at server.Server.main(Server.java:153)
    [20/09/11 6:39 PM]: A fatal exception has been thrown!
    [20/09/11 6:39 PM]: Saved game for Harman.
    Press any key to continue . . .

    The NPCHandler.java

    Code:
    package server.model.npcs;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    
    import server.Config;
    import server.Server;
    import server.model.players.Client;
    import server.util.Misc;
    import server.world.map.VirtualWorld;
    import server.world.WorldMap;
    import server.event.EventManager;
    import server.event.Event;
    import server.event.EventContainer;
    
    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");
    	}
    	
    	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 2551:
    			case 2552:
    			case 2553:
    			case 2559:
    			case 2560:
    			case 2561:
    			case 2563:
    			case 2564:
    			case 2565:
    			case 2892:
    			case 2894:
    			case 1158:
    			case 1160:
    			case 1153:
    			case 1154:
    			case 1155:
    			case 1156:
    			return true;
    		
    		}
    	
    		return false;
    	}
    	
    	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);
    			}		
    		}
    	}
    	
    	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 < Server.playerHandler.players.length; j++) {
    			if (Server.playerHandler.players[j] != null) {
    				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)
    							players.add(j);
    				}
    			}	
    		}
    		if (players.size() > 0)
    			return players.get(Misc.random(players.size() -1));
    		else
    			return 0;
    	}
    	
    	public int npcSize(int i) {
    		switch (npcs[i].npcType) {
    		case 2883:
    		case 2882:
    		case 2881:
    			return 3;
    		}
    		return 0;
    	}
    	
    	public boolean isAggressive(int i) {
    		switch (npcs[i].npcType) {
    			case 757:
    			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 1459:
    			case 50:
    			case 1926:
    			case 1913:
    			case 1974:
    			case 1977:
    			case 1914:
    			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(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
    		}
    		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();
    		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!");
    					}
    				}
    				if(server.model.minigames.Barrows.COFFIN_AND_BROTHERS[c.randomCoffin][1] == newNPC.npcType) {
    					newNPC.forceChat("You dare steal from us!");
    				}
    				
    				newNPC.killerId = c.playerId;
    			}
    		}
    		npcs[slot] = newNPC;
    	}
    	
    	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 757:
    			return 5411;
    			case 1459:
    				return 1402;
    			case 2550:
    				if (npcs[i].attackType == 0)
    					return 7060;
    				else
    					return 7063;	
    			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;
    			//bandos gwd
    			case 2551:
    			case 2552:
    			case 2553:
    			return 6154;
    			//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 13: //wizards
    			return 711;
    			
    			case 103:
    			case 655:
    			return 123;
    			
    			case 1624:
    			return 1557;
    			
    			case 1648:
    			return 1590;
    			
    			case 2783: //dark beast
    			return 2733;
    			
    			case 1615: //abby demon
    			return 1537;
    			
    			case 1613: //nech
    			return 1528;
    			
    			case 1610: case 1611: //garg
    			return 1519;
    			
    			case 1616: //basilisk
    			return 1546;
    			
    			case 90: //skele
    			return 260;
    			
    			case 50://drags
    			case 53:
    			case 54:
    			case 55:
    			case 941:
    			case 1590:
    			case 1591:
    			case 1592:
    			return 80;
    			
    			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 112:
    			case 117:
    			return 128;
    			
    			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 1184;
    			
    			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 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 1459:
    			return 1404;
    			//sara gwd
    			case 2562:
    			return 6965;
    			case 2563:
    			return 6377;
    			case 2564:
    			return 7016;
    			case 2565:
    			return 7011;
    			//bandos gwd
    			case 2551:
    			case 2552:
    			case 2553:
    			return 6156;
    			case 2550:
    			return 7062;
    			case 2892:
    			case 2894:
    			return 2865;
    			case 1612: //banshee
    			return 1524;
    			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 3777:
    			case 3778:
    			case 3779:
    			case 3780:
    			return -1;
    			
    			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 0x03E;
    			
    			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 1518;
    			
    			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 1190;
    			
    			case 103: case 104:
    			return 123;
    			
    			case 118: case 119:
    			return 102;
    			
    			
    			case 50://drags
    			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;
    			
    			default:
    			return 5;
    		}
    	}
    	
    	/**
    	* Hit delays
    	**/
    	public int getHitDelay(int i) {
    		switch(npcs[i].npcType) {
    			case 757:
    			return 3;
    			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 2025:
    			return 4;
    			case 2028:
    			return 3;
    
    			default:
    			return 2;
    		}
    	}
    		
    	/**
    	* Npc respawn time
    	**/
    	public int getRespawnTime(int i) {
    		switch(npcs[i].npcType) {
    			case 182:
    			case 183:
    			case 127:
    			return 60;
    			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:
    			case 1926:
    			return 100;
    			case 3777:
    			case 3778:
    			case 3779:
    			case 3780:
    			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 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].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;
    				
    				/**
    				* 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);
    				}
    				
    				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);
    						npcs[i].getNextNPCMovement(i); 
    						npcs[i].updateRequired = true;
    					}
    					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))
    								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);
    						if (isFightCaveNpc(i))
    							killedTzhaar(i);
    						npcs[i].actionTimer = 4; // delete time
    						resetPlayersInCombat(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);
    						appendKillCount(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) {					
    						if(npcs[i].spawnedBy > 0) {
    							npcs[i] = null;
    						} else {
    							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 2550:
    				if (npcs[i].firstAttacker > 0)
    					return false;
    			break;
    		}
    		return true;
    	}
    	   
    	public boolean multiAttacks(int i) {
    		switch (npcs[i].npcType) {
    			case 2558:
    			return true;
    			case 2562:
    			if (npcs[i].attackType == 2)
    				return true;
    			case 2550:
    			if (npcs[i].attackType == 1)
    				return true;	
    			case 1913:
    			if (npcs[i].attackType == 3)
    				return true;	
    			case 1974:
    			if (npcs[i].attackType == 2)
    				return true;	
    			case 1977:
    			if (npcs[i].attackType == 2)
    				return true;	
    			case 1914:
    			if (npcs[i].attackType == 3)
    				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 killedTzhaar(int i) {
    		final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    		c2.tzhaarKilled++;
    		//System.out.println("To kill: " + c2.tzhaarToKill + " killed: " + c2.tzhaarKilled);
    		if (c2.tzhaarKilled == c2.tzhaarToKill) {
    			//c2.sendMessage("STARTING EVENT");
    			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.sendMessage("Congratulations on completing the fight caves minigame!");
    		c.getPA().resetTzhaar();
    		c.waveId = 300;
    	}
    	
    	
    	/**
    	* Dropping Items!
    	**/
    	
    	public boolean rareDrops(int i) {
    		return Misc.random(NPCDrops.dropRarity.get(npcs[i].npcType)) == 0;
    	}
    	
    	
    	public void dropItems(int i) {
    		int npc = 0;
    		//long start = System.currentTimeMillis();
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			if (npcs[i].npcType == 9 || npcs[i].npcType == 2553 || npcs[i].npcType == 2552 || npcs[i].npcType == 2551 || npcs[i].npcType == 2550 || npcs[i].npcType == 2565 || npcs[i].npcType == 2564 || npcs[i].npcType == 2563 || npcs[i].npcType == 2562 || npcs[i].npcType == 2561 || npcs[i].npcType == 2560 || npcs[i].npcType == 2559 || npcs[i].npcType == 2558 || npcs[i].npcType == 2894 || npcs[i].npcType == 2892 || npcs[i].npcType == 134 || npcs[i].npcType == 3200 || npcs[i].npcType == 2883 || npcs[i].npcType == 2882 || npcs[i].npcType == 2881 || npcs[i].npcType == 50 || npcs[i].npcType == 1 || npcs[i].npcType == 131 || npcs[i].npcType == 912 || npcs[i].npcType == 913 || npcs[i].npcType == 914 || npcs[i].npcType == 1265 || npcs[i].npcType == 1266 || npcs[i].npcType == 1267 || npcs[i].npcType == 1267 || npcs[i].npcType == 1341 || npcs[i].npcType == 2607 || npcs[i].npcType == 941)
    				c.magePoints += 10;
    			if (NPCDrops.constantDrops.get(npcs[i].npcType) != null) {
    				for (int item : NPCDrops.constantDrops.get(npcs[i].npcType)) {
    					Server.itemHandler.createGroundItem(c, item, npcs[i].absX, npcs[i].absY, 1, c.playerId);
    					//if (c.clanId >= 0)
    						//Server.clanChat.handleLootShare(c, item, 1);
    				}	
    			}
    			
    			if (NPCDrops.dropRarity.get(npcs[i].npcType) != null) {
    				if (rareDrops(i)) {
    					int random = Misc.random(NPCDrops.rareDrops.get(npcs[i].npcType).length-1);
    					Server.itemHandler.createGroundItem(c, NPCDrops.rareDrops.get(npcs[i].npcType)[random][0], npcs[i].absX, npcs[i].absY, NPCDrops.rareDrops.get(npcs[i].npcType)[random][1], c.playerId);
    					if (c.clanId >= 0)
    						Server.clanChat.handleLootShare(c, NPCDrops.rareDrops.get(npcs[i].npcType)[random][0], NPCDrops.rareDrops.get(npcs[i].npcType)[random][1]);
    				} else {
    					int random = Misc.random(NPCDrops.normalDrops.get(npcs[i].npcType).length-1);
    					Server.itemHandler.createGroundItem(c, NPCDrops.normalDrops.get(npcs[i].npcType)[random][0], npcs[i].absX, npcs[i].absY, NPCDrops.normalDrops.get(npcs[i].npcType)[random][1], c.playerId);
    					//Server.clanChat.handleLootShare(c, NPCDrops.normalDrops.get(npcs[i].npcType)[random][0], NPCDrops.normalDrops.get(npcs[i].npcType)[random][1]);
    				}
    			}	
    			
    		}
    		//System.out.println("Took: " + (System.currentTimeMillis() - start));
    	}
    	
    	public void appendKillCount(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			int[] kcMonsters = {122,49,2558,2559,2560,2561,2550,2551,2552,2553,2562,2563,2564,2565};
    			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:
    			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)Server.playerHandler.players[npcs[i].killedBy];
    		if(c != null) {
    			if (c.slayerTask == 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);
    					c.slayerTask = -1;
    					c.sendMessage("You completed your slayer task. Please see a slayer master to get a new one.");
    				}
    			}
    		}
    	}
    	
    	/**
    	 *	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 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))
    						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) {
    		switch(npcs[i].npcType) {
    			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:
    			int random = Misc.random(4);
    			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;
    			} else if (random == 4) {
    				npcs[i].projectileId = -1; //melee
    				npcs[i].endGfx = -1;
    				npcs[i].attackType = 0;				
    			}			
    			break;
    			//arma npcs
    			case 2561:
    				npcs[i].attackType = 0;
    			break;
    			case 2560:
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 1190;
    			break;
    			case 2559:
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 1203;
    			break;
    			case 2558:
    				random = Misc.random(1);
    				npcs[i].attackType = 1 + random;
    				if (npcs[i].attackType == 1) {
    					npcs[i].projectileId = 1197;				
    				} else {
    					npcs[i].attackType = 2;
    					npcs[i].projectileId = 1198;
    				}	
    			break;
    			//sara npcs
    			case 2562: //sara
    				random = Misc.random(1);
    				if (random == 0) {
    					npcs[i].attackType = 2;
    					npcs[i].endGfx = 1224;
    					npcs[i].projectileId = -1;
    				} else if (random == 1)
    					npcs[i].attackType = 0;
    			break;
    			case 2563: //star
    				npcs[i].attackType = 0;
    			break;
    			case 2564: //growler
    				npcs[i].attackType = 2;
    				npcs[i].projectileId = 1203;
    			break;
    			case 2565: //bree
    				npcs[i].attackType = 1;
    				npcs[i].projectileId = 9;
    			break;
    			//pvp bosses
    			case 1913:
    				random = Misc.random(2);
    				if (random == 0 || random == 1)
    					npcs[i].attackType = 0;
    				else {
    					npcs[i].attackType = 1;
    					npcs[i].endGfx = 1211;
    					npcs[i].projectileId = 288;
    				}
    			case 1914:
    				random = Misc.random(2);
    				if (random == 0 || random == 1)
    					npcs[i].attackType = 0;
    				else {
    					npcs[i].attackType = 1;
    					npcs[i].endGfx = 1211;
    					npcs[i].projectileId = 288;
    				}
    			case 1974:
    				random = Misc.random(2);
    				if (random == 0 || random == 1)
    					npcs[i].attackType = 0;
    				else {
    					npcs[i].attackType = 1;
    					npcs[i].endGfx = 1211;
    					npcs[i].projectileId = 288;
    				}
    			case 1977:
    				random = Misc.random(2);
    				if (random == 0 || random == 1)
    					npcs[i].attackType = 0;
    				else {
    					npcs[i].attackType = 1;
    					npcs[i].endGfx = 1211;
    					npcs[i].projectileId = 288;
    				}
    			break;
    			//bandos npcs
    			case 2550:
    				random = Misc.random(2);
    				if (random == 0 || random == 1)
    					npcs[i].attackType = 0;
    				else {
    					npcs[i].attackType = 1;
    					npcs[i].endGfx = 1211;
    					npcs[i].projectileId = 288;
    				}
    			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 (npcs[i] != null && Server.playerHandler.players[npcs[i].spawnedBy] != null)
    			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 757:
    			return 8;
    			case 2025:
    			case 2028:
    			return 6;
    			case 50:
    			case 2562:
    			return 2;
    			case 2881://dag kings
    			case 2882:
    			case 3200://chaos ele
    			case 2743:
    			case 2631:
    			case 2745:
    			return 8;
    			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;
    			//things around dags
    			case 2892:
    			case 2894:
    			return 10;
    			default:
    			return 1;
    		}
    	}
    	
    	public int followDistance(int i) {
    		switch (npcs[i].npcType) {
    case 757:
    			return 8;
    			case 2550:
    			case 2551:
    			case 2562:
    			case 2563:
    			case 1913:
    			case 1914:
    			case 1977:
    			case 1974:
    			return 8;
    			case 2883:
    			return 4;
    			case 2881:
    			case 2882:
    			return 1;
    		
    		}
    		return 0;
    		
    	
    	}
    	
    	public int getProjectileSpeed(int i) {
    		switch(npcs[i].npcType) {
    			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] != 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].npcType == 757) {
    						c.getPA().appendPoison(12);
    						}
    					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]) { // protect from melee
    						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 = 1;
    					}					
    					if(c.prayerActive[17]) { // protect from range
    						damage = 1;
    					}				
    					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 = 1;
    						magicFailed = true;
    					}				
    					if(c.prayerActive[16]) { // protect from magic
    						damage = 1;
    						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 (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);
    				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 (damage > 0) {
    				if (c != null) {
    					if (c.playerLevel[5] > 0) {
    						c.playerLevel[5]--;
    						c.getPA().refreshSkill(5);
    						c.getPA().appendPoison(12);
    					}
    				}			
    			}	
    		}
    	
    	}
    		
    		
    
    	public 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) {
    		for (int i = 0; i <= distance; i++) {
    		  for (int j = 0; j <= distance; j++) {
    			if ((objectX + i) == playerX && ((objectY + j) == playerY || (objectY - j) == playerY || objectY == playerY)) {
    				return true;
    			} else if ((objectX - i) == playerX && ((objectY + j) == playerY || (objectY - j) == playerY || objectY == playerY)) {
    				return true;
    			} else if (objectX == playerX && ((objectY + j) == playerY || (objectY - j) == playerY || objectY == playerY)) {
    				return true;
    			}
    		  }
    		}
    		return false;
    	}
    	
          
    	public int getMaxHit(int i) {
    		switch (npcs[i].npcType) {
    			case 2558:
    				if (npcs[i].attackType == 2)
    					return 28;
    				else
    					return 68;
    			case 2562:
    				return 31;
    			case 2550:
    				return 36;
    			case 1913:
    				return 70;
    			case 1914:
    				return 70;
    			case 1977:
    				return 70;
    			case 1974:
    				return 70;
    		}
    		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 jadBattle[] = {0,2,4};
    
            public int randomjadBattle()
            {
                return jadBattle[(int)(Math.random()*jadBattle.length)];
            }
        public int tzBattle[] = {0,2};
    
            public int randomtzBattle()
            {
                return tzBattle[(int)(Math.random()*tzBattle.length)];
            }
        public int rangeBattle[] = {0,2};
    
            public int randomrangeBattle()
            {
                return rangeBattle[(int)(Math.random()*rangeBattle.length)];
            }
    
    	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;
    	}
    	
    
    }



    The Server.java is here ::::

    Code:
    
    package server;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.text.DecimalFormat;
    
    import org.apache.mina.common.IoAcceptor;
    import org.apache.mina.transport.socket.nio.SocketAcceptor;
    import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
    
    import server.util.ScriptManager;
    import server.event.EventManager;
    import server.model.npcs.NPCHandler;
    import server.model.npcs.NPCDrops;
    import server.model.players.PlayerHandler;
    import server.model.players.Player;
    import server.model.players.Client;
    import server.model.players.PlayerSave;
    import server.model.minigames.*;
    import server.model.npcs.*;
    import server.net.ConnectionHandler;
    import server.net.ConnectionThrottleFilter;
    import server.util.ShutDownHook;
    import server.util.SimpleTimer;
    import server.util.log.Logger;
    import server.world.ItemHandler;
    import server.world.ObjectHandler;
    import server.world.ObjectManager;
    import server.world.ShopHandler;
    import server.world.map.VirtualWorld;
    import server.world.ClanChatHandler;
    import server.world.WorldMap;
    
    /**
     * Server.java
     *
     * @author Sanity
     * @author Graham
     * @author Blake
     * @author Ryan Lmctruck30
     *
     */
    
    public class Server {
    	
    	
    	public static boolean sleeping;
    	public static final int cycleRate;
    	public static boolean UpdateServer = false;
    	public static long lastMassSave = System.currentTimeMillis();
    	private static IoAcceptor acceptor;
    	private static ConnectionHandler connectionHandler;
    	private static ConnectionThrottleFilter throttleFilter;
    	private static SimpleTimer engineTimer, debugTimer;
    	private static long cycleTime, cycles, totalCycleTime, sleepTime;
    	private static DecimalFormat debugPercentFormat;
    	public static boolean shutdownServer = false;		
    	public static boolean shutdownClientHandler;			
    	public static int serverlistenerPort; 
    	public static ItemHandler itemHandler = new ItemHandler();
    	public static PlayerHandler playerHandler = new PlayerHandler();
        public static NPCHandler npcHandler = new NPCHandler();
    	public static ShopHandler shopHandler = new ShopHandler();
    	public static ObjectHandler objectHandler = new ObjectHandler();
    	public static ObjectManager objectManager = new ObjectManager();
    	public static CastleWars castleWars = new CastleWars();
    	public static FightPits fightPits = new FightPits();
    	public static PestControl pestControl = new PestControl();
    	public static NPCDrops npcDrops = new NPCDrops();
    	public static ClanChatHandler clanChat = new ClanChatHandler();
    	public static FightCaves fightCaves = new FightCaves();
    	//public static WorldMap worldMap = new WorldMap();
    	//private static final WorkerThread engine = new WorkerThread();
    	
    	static {
    		if(!Config.SERVER_DEBUG) {
    			serverlistenerPort = 43594;
    		} else {
    			serverlistenerPort = 43594;
    		}
    		cycleRate = 600;
    		shutdownServer = false;
    		engineTimer = new SimpleTimer();
    		debugTimer = new SimpleTimer();
    		sleepTime = 0;
    		debugPercentFormat = new DecimalFormat("0.0#%");
    	}
    	//height,absX,absY,toAbsX,toAbsY,type
        /*public static final boolean checkPos(int height,int absX,int absY,int toAbsX,int toAbsY,int type)
        {
            return I.I(height,absX,absY,toAbsX,toAbsY,type);
        }*/
    	public static void main(java.lang.String args[]) throws NullPointerException, IOException {
    		/**
    		 * Starting Up Server
    		 */
    		 
    		System.setOut(new Logger(System.out));
    		System.setErr(new Logger(System.err));
    		System.out.println("Initializing start up...");
    		
    		/**
    		 * World Map Loader
    		 */
    		/*if(!Config.SERVER_DEBUG)
    		VirtualWorld.init();
    		WorldMap.loadWorldMap();*/
    
    		/**
    		 * Script Loader
    		 */
    		ScriptManager.loadScripts();
    		
    		/**
    		 * Accepting Connections
    		 */
    		acceptor = new SocketAcceptor();
    		connectionHandler = new ConnectionHandler();
    		
    		SocketAcceptorConfig sac = new SocketAcceptorConfig();
    		sac.getSessionConfig().setTcpNoDelay(false);
    		sac.setReuseAddress(true);
    		sac.setBacklog(100);
    		
    		throttleFilter = new ConnectionThrottleFilter(Config.CONNECTION_DELAY);
    		sac.getFilterChain().addFirst("throttleFilter", throttleFilter);
    		acceptor.bind(new InetSocketAddress(serverlistenerPort), connectionHandler, sac);
    
    		/**
    		 * Initialise Handlers
    		 */
    		EventManager.initialize();
    		Connection.initialize();
    		//PlayerSaving.initialize();
    		//MysqlManager.createConnection();
    		
    		/**
    		 * Server Successfully Loaded 
    		 */
    		System.out.println("EvoScape successfully started, current server port:" + serverlistenerPort);
    		/**
    		 * Main Server Tick
    		 */
    		try {
    			while (!Server.shutdownServer) {
    				if (sleepTime >= 0)
    					Thread.sleep(sleepTime);
    				else
    					Thread.sleep(600);
    				engineTimer.reset();
    				itemHandler.process();
    				playerHandler.process();	
    	            npcHandler.process();
    				shopHandler.process();
    				objectManager.process();
    				fightPits.process();
    				pestControl.process();
    				cycleTime = engineTimer.elapsed();
    				sleepTime = cycleRate - cycleTime;
    				totalCycleTime += cycleTime;
    				cycles++;
    				debug();
    				if (System.currentTimeMillis() - lastMassSave > 300000) {
    					for(Player p : PlayerHandler.players) {
    						if(p == null)
    							continue;						
    						PlayerSave.saveGame((Client)p);
    						System.out.println("Saved game for " + p.playerName + ".");
    						lastMassSave = System.currentTimeMillis();
    					}
    				
    				}
    			}
    		} catch (Exception ex) {
    			ex.printStackTrace();
    			System.out.println("A fatal exception has been thrown!");
    			for(Player p : PlayerHandler.players) {
    				if(p == null)
    					continue;						
    				PlayerSave.saveGame((Client)p);
    				System.out.println("Saved game for " + p.playerName + ".");
    			}
    		}
    		acceptor = null;
    		connectionHandler = null;
    		sac = null;
    		System.exit(0);
    	}
    	
    	public static void processAllPackets() {
    		for (int j = 0; j < playerHandler.players.length; j++) {
    			if (playerHandler.players[j] != null) {
    				while(playerHandler.players[j].processQueuedPackets());			
    			}	
    		}
    	}
    	
    	public static boolean playerExecuted = false;
    	private static void debug() {
    		if (debugTimer.elapsed() > 360*1000 || playerExecuted) {
    			long averageCycleTime = totalCycleTime / cycles;
    			System.out.println("Average Cycle Time: " + averageCycleTime + "ms");
    			double engineLoad = ((double) averageCycleTime / (double) cycleRate);
    			System.out.println("Players online: " + PlayerHandler.playerCount+ ", engine load: "+ debugPercentFormat.format(engineLoad));
    			totalCycleTime = 0;
    			cycles = 0;
    			System.gc();
    			System.runFinalization();
    			debugTimer.reset();
    			playerExecuted = false;
    		}
    	}
    	
    	public static long getSleepTimer() {
    		return sleepTime;
    	}
    	
    }



    What is the problem?
    Reply With Quote  
     

  2. #2  
    REGISTERED MEMBER RAT DONOR MORE COMING

    Major's Avatar
    Join Date
    Jan 2011
    Posts
    3,002
    Thanks given
    1,295
    Thanks received
    3,549
    Rep Power
    5000
    Code:
    	public void handleJadDeath(int i) {
    		Client c = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    		c.getItems().addItem(6570,1);
    		c.sendMessage("Congratulations on completing the fight caves minigame!");
    		c.getPA().resetTzhaar();
    		c.waveId = 300;
    	}
    Something to do with that.
    Too lazy to look more, sorry.

    Edit: Should have actually looked at it. It's to do with

    Code:
    	private void killedTzhaar(int i) {
    		final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    		c2.tzhaarKilled++;
    		//System.out.println("To kill: " + c2.tzhaarToKill + " killed: " + c2.tzhaarKilled);
    		if (c2.tzhaarKilled == c2.tzhaarToKill) {
    			//c2.sendMessage("STARTING EVENT");
    			c2.waveId++;
    			EventManager.getSingleton().addEvent(new Event() {
    				public void execute(EventContainer c) {
    					if (c2 != null) {
    						//Server.fightCaves.spawnNextWave(c2);
    					}	
    					c.stop();
    				}
    			}, 7500);
    			
    		}
    	}
    Reply With Quote  
     

  3. #3  
    Donator


    Join Date
    Sep 2008
    Age
    27
    Posts
    397
    Thanks given
    138
    Thanks received
    27
    Rep Power
    161
    Code:
    private void killedTzhaar(int i) {
                    final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
                    c2.tzhaarKilled++;
                    //System.out.println("To kill: " + c2.tzhaarToKill + " killed: " + c2.tzhaarKilled);
                    if (c2.tzhaarKilled == c2.tzhaarToKill) {
                            //c2.sendMessage("STARTING EVENT");
                            c2.waveId++;
                            EventManager.getSingleton().addEvent(new Event() {
                                    public void execute(EventContainer c) {
                                            if (c2 != null) {
                                                    Server.fightCaves.spawnNextWave(c2);
                                            }       
                                            c.stop();
                                    }
                            }, 7500);
                           
                    }
            }
    Replace that with your old killedTzhaar method.

    EDIT: I'm not guaranteeing this will work.



    [Only registered and activated users can see links. ]
    ---


    Lawl! ^ ^
    Reply With Quote  
     

  4. #4  
    Registered Member
    Lil Str Kid's Avatar
    Join Date
    Jul 2007
    Age
    28
    Posts
    1,302
    Thanks given
    169
    Thanks received
    71
    Rep Power
    260
    Edit try debugging the issue also show me this line.

    server.model.npcs.NPCHandler.killedTzhaar(NPCHandl er.java:1208)


    Reply With Quote  
     

  5. #5  
    Banned

    Join Date
    Sep 2009
    Posts
    904
    Thanks given
    139
    Thanks received
    55
    Rep Power
    0
    Quote Originally Posted by Ragez Fury View Post
    Code:
    private void killedTzhaar(int i) {
                    final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
                    c2.tzhaarKilled++;
                    //System.out.println("To kill: " + c2.tzhaarToKill + " killed: " + c2.tzhaarKilled);
                    if (c2.tzhaarKilled == c2.tzhaarToKill) {
                            //c2.sendMessage("STARTING EVENT");
                            c2.waveId++;
                            EventManager.getSingleton().addEvent(new Event() {
                                    public void execute(EventContainer c) {
                                            if (c2 != null) {
                                                    Server.fightCaves.spawnNextWave(c2);
                                            }       
                                            c.stop();
                                    }
                            }, 7500);
                           
                    }
            }
    Replace that with your old killedTzhaar method.

    EDIT: I'm not guaranteeing this will work.

    Didn't work.
    Reply With Quote  
     

  6. #6  
    REGISTERED MEMBER RAT DONOR MORE COMING

    Major's Avatar
    Join Date
    Jan 2011
    Posts
    3,002
    Thanks given
    1,295
    Thanks received
    3,549
    Rep Power
    5000
    Quote Originally Posted by Lil Str Kid View Post
    Edit try debugging the issue also show me this line.

    server.model.npcs.NPCHandler.killedTzhaar(NPCHandl er.java:1208)
    Really? He posted it...

    Code:
    	private void killedTzhaar(int i) {
    		final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    		c2.tzhaarKilled++;
    		//System.out.println("To kill: " + c2.tzhaarToKill + " killed: " + c2.tzhaarKilled);
    		if (c2.tzhaarKilled == c2.tzhaarToKill) {
    			//c2.sendMessage("STARTING EVENT");
    			c2.waveId++;
    			EventManager.getSingleton().addEvent(new Event() {
    				public void execute(EventContainer c) {
    					if (c2 != null) {
    						//Server.fightCaves.spawnNextWave(c2);
    					}	
    					c.stop();
    				}
    			}, 7500);
    			
    		}
    	}
    Reply With Quote  
     

  7. #7  
    Registered Member
    Lil Str Kid's Avatar
    Join Date
    Jul 2007
    Age
    28
    Posts
    1,302
    Thanks given
    169
    Thanks received
    71
    Rep Power
    260
    Quote Originally Posted by Major View Post
    Really? He posted it...

    Code:
    	private void killedTzhaar(int i) {
    		final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    		c2.tzhaarKilled++;
    		//System.out.println("To kill: " + c2.tzhaarToKill + " killed: " + c2.tzhaarKilled);
    		if (c2.tzhaarKilled == c2.tzhaarToKill) {
    			//c2.sendMessage("STARTING EVENT");
    			c2.waveId++;
    			EventManager.getSingleton().addEvent(new Event() {
    				public void execute(EventContainer c) {
    					if (c2 != null) {
    						//Server.fightCaves.spawnNextWave(c2);
    					}	
    					c.stop();
    				}
    			}, 7500);
    			
    		}
    	}
    Cba to check what line it is fuck it....

    final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy]; is a null meaning it doesn't exist.

    above that line add this

    System.out.println(npcs[i].spawnedBy);

    tell me what it prints.


    Reply With Quote  
     

  8. #8  
    Banned

    Join Date
    Sep 2009
    Posts
    904
    Thanks given
    139
    Thanks received
    55
    Rep Power
    0
    Quote Originally Posted by Lil Str Kid View Post
    Cba to check what line it is fuck it....

    final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy]; is a null meaning it doesn't exist.

    above that line add this

    System.out.println(npcs[i].spawnedBy);

    tell me what it prints.


    says


    [21/09/11 3:51 PM]: java.lang.NullPointerException
    [21/09/11 3:51 PM]: at server.model.npcs.NPCHandler.killedTzhaar(NPCHandl er.
    java:1208)
    [21/09/11 3:51 PM]: at server.model.npcs.NPCHandler.process(NPCHandler.ja va:
    1086)
    [21/09/11 3:51 PM]: at server.Server.main(Server.java:153)
    [21/09/11 3:51 PM]: A fatal exception has been thrown!
    [21/09/11 3:51 PM]: Saved game for Harman.
    Press any key to continue . . .
    Reply With Quote  
     

  9. #9  
    Registered Member
    Lil Str Kid's Avatar
    Join Date
    Jul 2007
    Age
    28
    Posts
    1,302
    Thanks given
    169
    Thanks received
    71
    Rep Power
    260
    Emm guess that means when jad spawns it's not being added to the npc array.

    Emm change the System.out.println(npcs[i].spawnedBy);

    to

    System.out.println(npcs[i]);

    tell me what it says


    Reply With Quote  
     

  10. #10  
    REGISTERED MEMBER RAT DONOR MORE COMING

    Major's Avatar
    Join Date
    Jan 2011
    Posts
    3,002
    Thanks given
    1,295
    Thanks received
    3,549
    Rep Power
    5000
    Quote Originally Posted by HarmanK View Post
    says
    He means

    Code:
    System.out.println(Server.playerHandler.players[npcs[i].spawnedBy]);
    Also comment out/remove the other line

    Code:
    final Client c2 = (Client)Server.playerHandler.players[npcs[i].spawnedBy];
    That one.
    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: 6
    Last Post: 09-15-2010, 04:20 PM
  2. Replies: 4
    Last Post: 07-27-2010, 06:38 PM
  3. Replies: 6
    Last Post: 05-01-2010, 05:18 AM
  4. Kalphite Queen Error(Thread-5 Error)
    By owner jacob in forum Help
    Replies: 4
    Last Post: 12-22-2009, 06:36 PM
  5. [Error] Perfect range and melee [ERROR]
    By Wallace in forum Help
    Replies: 16
    Last Post: 06-21-2009, 09:56 AM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •