i get this exception
[5/5/12 5:56 AM]: java.lang.ArrayIndexOutOfBoundsException: 1163
[5/5/12 5:56 AM]: at server.model.players.CombatAssistant.delayedHit(Co mba
tAssistant.java:599)
[5/5/12 5:56 AM]: at server.model.players.Client.process(Client.java:16 55)
[5/5/12 5:56 AM]: at server.model.players.PlayerHandler.process(PlayerH and
ler.java:176)
[5/5/12 5:56 AM]: at server.Server.main(Server.java:210)
my delayedhit method
Code:
public void delayedHit(int i) { // npc hit delay
if (Server.npcHandler.npcs[i] != null) {
if (Server.npcHandler.npcs[i].isDead) {
c.npcIndex = 0;
return;
}
Server.npcHandler.npcs[i].facePlayer(c.playerId);
if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.getsPulled(i)) {
Server.npcHandler.npcs[i].killerId = c.playerId;
} else if (Server.npcHandler.npcs[i].underAttackBy < 0 && !Server.npcHandler.getsPulled(i)) {
Server.npcHandler.npcs[i].killerId = c.playerId;
}
c.lastNpcAttacked = i;
if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
if (!c.usingClaws)
applyNpcMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
if(c.doubleHit && !c.usingClaws) {
applyNpcMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
}
if(c.doubleHit && c.usingClaws) {
c.delayedDamage = c.clawDamage;
c.delayedDamage2 = c.clawDamage/2;
applyNpcMeleeDamage(i, 1, c.clawDamage);
applyNpcMeleeDamage(i, 2, c.clawDamage/2);
}
}
if(!c.castingMagic && c.projectileStage > 0) { // range hit damage
int damage = Misc.random(rangeMaxHit());
int damage2 = -1;
if (c.lastWeaponUsed == 11235 || c.lastWeaponUsed == 14481 || c.lastWeaponUsed == 14482 || c.bowSpecShot == 1)
damage2 = Misc.random(rangeMaxHit());
boolean ignoreDef = false;
if (Misc.random(5) == 1 && c.lastArrowUsed == 9243 && c.playerEquipment[c.playerWeapon] == 9185 && c.playerEquipment[c.playerWeapon] == 18357) {
ignoreDef = true;
Server.npcHandler.npcs[i].gfx0(758);
}
if(Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()) && !ignoreDef) {
damage = 0;
} else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2883 || Server.npcHandler.npcs[i].npcType == 3340 && !ignoreDef) {
damage = 0;
}
if (Misc.random(5) == 1 && c.lastArrowUsed == 9242 && damage > 0 && c.playerEquipment[c.playerWeapon] == 9185) {
Server.npcHandler.npcs[i].gfx0(754);
damage = Server.npcHandler.npcs[i].HP/5;
//c.handleHitMask(c.playerLevel[3]/10);
c.dealDamage(c.playerLevel[3]/10);
c.gfx0(754);
}
if (Misc.random(4) == 1 && c.lastArrowUsed == 9242 && damage > 0 && c.playerEquipment[c.playerWeapon] == 18357) {
Server.npcHandler.npcs[i].gfx0(754);
damage = Server.npcHandler.npcs[i].HP/5;
//c.handleHitMask(c.playerLevel[3]/10);
c.dealDamage(c.playerLevel[3]/10);
c.gfx0(754);
}
if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
if (Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()))
damage2 = 0;
}
if (c.dbowSpec) {
Server.npcHandler.npcs[i].gfx100(1100);
if(c.dbowDelay == 4)
if (damage < 8)
damage = 8;
else if(c.dbowDelay == 1)
if (damage2 < 8)
damage2 = 8;
c.dbowSpec = false;
}
if (damage > 0 && Misc.random(5) == 1 && c.lastArrowUsed == 9244 && c.playerEquipment[c.playerWeapon] == 9185) {
damage *= 1.45;
Server.npcHandler.npcs[i].gfx0(756);
}
if (damage > 0 && Misc.random(4) == 1 && c.lastArrowUsed == 9244 && c.playerEquipment[c.playerWeapon] == 18357) {
damage *= 1.45;
Server.npcHandler.npcs[i].gfx0(756);
}
if (Server.npcHandler.npcs[i].HP - damage < 0) {
damage = Server.npcHandler.npcs[i].HP;
}
if (Server.npcHandler.npcs[i].HP - damage <= 0 && damage2 > 0) {
damage2 = 0;
}
if(c.fightMode == 3) {
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 4);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 1);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
c.getPA().refreshSkill(1);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(4);
} else {
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE), 4);
c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(4);
}
if (damage > 0) {
if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
c.pcDamage += damage;
}
}
boolean dropArrows = true;
for(int noArrowId : c.NO_ARROW_DROP) {
if(c.lastWeaponUsed == noArrowId) {
dropArrows = false;
break;
}
}
if(dropArrows) {
c.getItems().dropArrowNpc();
}
//o.CIcon = 1;
Server.npcHandler.npcs[i].hitDiff = damage;
Server.npcHandler.npcs[i].underAttack = true;
Server.npcHandler.npcs[i].CIcon = 1;
Server.npcHandler.npcs[i].HP -= damage;
Server.npcHandler.npcs[i].hitUpdateRequired = true;
if (damage2 > -1) {
Server.npcHandler.npcs[i].hitDiff2 = damage2;
Server.npcHandler.npcs[i].CIcon = 1;
Server.npcHandler.npcs[i].HP -= damage2;
c.totalDamageDealt += damage2;
Server.npcHandler.npcs[i].hitUpdateRequired = true;
}
if (c.killingNpcIndex != c.oldNpcIndex) {
c.totalDamageDealt = 0;
}
c.killingNpcIndex = c.oldNpcIndex;
c.totalDamageDealt += damage;
Server.npcHandler.npcs[i].hitUpdateRequired = true;
if (damage2 > -1)
Server.npcHandler.npcs[i].hitUpdateRequired2 = true;
Server.npcHandler.npcs[i].updateRequired = true;
} else if (c.projectileStage > 0) { // magic hit damage
int damage = Misc.random(finalMagicDamage(c));
Client o = (Client) Server.playerHandler.players[i];
if(godSpells()) {
if(System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
damage += Misc.random(10);
}
}
boolean magicFailed = false;
Server.npcHandler.npcs[i].CIcon = 2;
//c.npcIndex = 0;
int bonusAttack = getBonusAttack(i);
if (Misc.random(Server.npcHandler.npcs[i].defence) > 10+ Misc.random(mageAtk()) + bonusAttack) {
damage = 0;
magicFailed = true;
} else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2882) {
damage = 0;
magicFailed = true;
}
if (Server.npcHandler.npcs[i].HP - damage < 0) {
damage = Server.npcHandler.npcs[i].HP;
}
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
c.getPA().refreshSkill(3);
c.getPA().refreshSkill(6);
if (damage > 0) {
if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
c.pcDamage += damage;
}
}
if(getEndGfxHeight() == 100 && !magicFailed){ // end GFX
Server.npcHandler.npcs[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
} else if (!magicFailed){
Server.npcHandler.npcs[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
}
if(magicFailed) {
Server.npcHandler.npcs[i].gfx100(85);
}
if(!magicFailed) {
int freezeDelay = getFreezeTime();//freeze
if(freezeDelay > 0 && Server.npcHandler.npcs[i].freezeTimer == 0) {
Server.npcHandler.npcs[i].freezeTimer = freezeDelay;
Server.npcHandler.npcs[i].barrageorb = 1;
}
switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
case 12871:
if (Server.npcHandler.npcs[i].barrageorb == 1) {
Server.npcHandler.npcs[i].barrageorb = 0;
}
break;
case 12891:
if (Server.npcHandler.npcs[i].barrageorb != 1) {
Server.npcHandler.npcs[i].gfx50(1677);
}
if (Server.npcHandler.npcs[i].barrageorb == 1) {
Server.npcHandler.npcs[i].barrageorb = 0;
}
break;
case 12901:
case 12919: // blood spells
case 12911:
case 12929:
int heal = Misc.random(damage / 2);
if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPA().refreshSkill(3);
break;
}
}
Server.npcHandler.npcs[i].underAttack = true;
if(finalMagicDamage(c) != 0) {
Server.npcHandler.npcs[i].hitDiff = damage;
Server.npcHandler.npcs[i].HP -= damage;
Server.npcHandler.npcs[i].hitUpdateRequired = true;
c.totalDamageDealt += damage;
}
c.killingNpcIndex = c.oldNpcIndex;
Server.npcHandler.npcs[i].updateRequired = true;
c.usingMagic = false;
c.castingMagic = false;
c.oldSpellId = 0;
}
}
if(c.bowSpecShot <= 0) {
c.oldNpcIndex = 0;
c.projectileStage = 0;
c.doubleHit = false;
c.lastWeaponUsed = 0;
c.bowSpecShot = 0;
}
if(c.bowSpecShot >= 2) {
c.bowSpecShot = 0;
//c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
}
if(c.bowSpecShot == 1) {
fireProjectileNpc();
c.hitDelay = 2;
c.bowSpecShot = 0;
}
}
pi/dspk
higlighted line 1163
if(!c.usingMagic) {
c.startAnimation(getWepAnim(c.getItems().getItemNa me(c.playerEquipment[c.playerWeapon]).toLowerCase()));
c.mageFollow = false;
} else {
c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
c.mageFollow = true;
c.followId = c.playerIndex;
}
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
Server.playerHandler.players[i].killerId = c.playerId;
c.lastArrowUsed = 0;
c.rangeItemUsed = 0;
if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer();
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquip ment[c.playerWeapon]).toLowerCase());
c.delayedDamage = Misc.random(calculateMeleeMaxHit());
c.projectileStage = 0;
c.oldPlayerIndex = i;
}