public boolean AttackNPC(int NPCID) {
    if(server.npcHandler.npcs[npcs[NPCID].attacknpc] != null) {
		int EnemyX = server.npcHandler.npcs[npcs[NPCID].attacknpc].absX;
		int EnemyY = server.npcHandler.npcs[npcs[NPCID].attacknpc].absY;
		int EnemyHP = server.npcHandler.npcs[npcs[NPCID].attacknpc].HP;
		int hitDiff = 0;
                int Npchitdiff = 0;
                int wepdelay = 0;
                hitDiff = misc.random(npcs[NPCID].MaxHit);
		if (GoodDistance(EnemyX, EnemyY, npcs[NPCID].absX, npcs[NPCID].absY, 1) == true) {
				if (server.npcHandler.npcs[npcs[NPCID].attacknpc].IsDead == true) {
					ResetAttackNPC(NPCID);
					npcs[NPCID].textUpdate = "Oh yeah I win bitch!";
					npcs[NPCID].textUpdateRequired = true;
                    npcs[NPCID].animNumber = 2103;
					npcs[NPCID].animUpdateRequired = true;
					npcs[NPCID].updateRequired = true;
				} else  {
					if ((EnemyHP - hitDiff) < 0) {
						hitDiff = EnemyHP;
					}
                                        if(npcs[NPCID].npcType == 9)
                                        npcs[NPCID].animNumber = 386;
                                        if(npcs[NPCID].npcType == 3200)
					npcs[NPCID].animNumber = 0x326; // drags: chaos ele emote ( YESSS ) 
                                        if(npcs[NPCID].npcType == 1605) {
					npcs[NPCID].animNumber = 386; // drags: abberant spector death ( YAY )
					} 
					npcs[NPCID].animUpdateRequired = true;
					npcs[NPCID].updateRequired = true;
					server.npcHandler.npcs[npcs[NPCID].attacknpc].hitDiff = hitDiff;
					server.npcHandler.npcs[npcs[NPCID].attacknpc].attacknpc = NPCID;
					server.npcHandler.npcs[npcs[NPCID].attacknpc].updateRequired = true;
					server.npcHandler.npcs[npcs[NPCID].attacknpc].hitUpdateRequired = true;
					npcs[NPCID].actionTimer = 7;
				        return true;
                                        }
				}
                }
		return false;
	}