when i spec some monsters i get this error
Code:
[25/08/13 15:11]: java.lang.ArrayIndexOutOfBoundsException: 2178
[25/08/13 15:11]: at server.engine.entity.players.combat.CombatAssistant.activateSpecial(CombatAssistant.java:2814)
[25/08/13 15:11]: at server.engine.entity.players.combat.CombatAssistant.attackNpc(CombatAssistant.java:257)
[25/08/13 15:11]: at server.engine.entity.players.Client.process(Client.java:908)
[25/08/13 15:11]: at server.engine.entity.players.PlayerHandler.process(PlayerHandler.java:180)
[25/08/13 15:11]: at server.core.Server.main(Server.java:160)
Activate special-
Code:
public void activateSpecial(int weapon, int i){
if(Server.npcHandler.npcs[i] == null && c.npcIndex > 0) {
return;
}
if (!c.usingSpecial) {
c.doubleHit = false;
return;
}
if(Server.playerHandler.players[i] == null && c.playerIndex > 0) {
return;
}
c.doubleHit = false;
c.specEffect = 0;
c.projectileStage = 0;
c.specMaxHitIncrease = 2;
if(c.npcIndex > 0) {
c.oldNpcIndex = i;
} else if (c.playerIndex > 0){
c.oldPlayerIndex = i;
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;
}
switch(weapon) {
case 1305: // dragon long
c.gfx100(248);
c.startAnimation(1058);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.specAccuracy = 1.10;
c.specDamage = 1.20;
break;
case 15241: // hand cannon spec!!
c.usingBow = true;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(12175);
c.specAccuracy = 8.5;
c.specDamage = 2.25;
c.hitDelay = 5;
c.attackTimer-= 7;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
break;
case 1215: // dragon daggers
case 1231:
case 5680:
case 5698:
c.gfx100(252);
c.startAnimation(1062);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.doubleHit = true;
c.specAccuracy = 1.30;
c.specDamage = 1.05;
break;
case 13905: // Vesta spear
c.startAnimation(10499);
c.gfx0(1835);
c.specAccuracy = 1.25;
c.specEffect = 6;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 13899: // Vesta LongSword
c.startAnimation(10502);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
c.specDamage = 1.15;
c.specAccuracy = 1.70;
break;
case 13902: // Statius
c.startAnimation(10505);
c.gfx0(1840);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
c.specDamage = 1.35;
c.specAccuracy = 2.25;
break;
case 11730:
c.gfx100(1224);
c.startAnimation(811);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.doubleHit = true;
c.ssSpec = true;
c.specAccuracy = 1.30;
break;
//all damage will be s
case 14484:
c.gfx0(1950);
c.startAnimation(10961);
c.specAccuracy = 1000.0;
c.clawDamage = 0;
if (c.playerIndex > 0) {
Client o = (Client) Server.playerHandler.players[c.playerIndex];
if (Misc.random(calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence())) {
c.clawDamage = Misc.random(calculateMeleeMaxHit() + Misc.random(4));
}
c.clawIndex = c.playerIndex;
c.clawType = 1;
} else if (c.npcIndex > 0) {
NPC n = Server.npcHandler.npcs[c.npcIndex];
if (Misc.random(calculateMeleeAttack()) > Misc.random(n.defence)) {
c.clawDamage = Misc.random(calculateMeleeMaxHit() + Misc.random(2));
}
c.clawIndex = c.npcIndex;
c.clawType = 2;
}
c.doubleHit = true;
c.usingClaws = true;
c.specEffect = 5;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 4151: // whip
if(Server.npcHandler.npcs[i] != null) {
Server.npcHandler.npcs[i].gfx100(341);
}
c.specAccuracy = 1.10;
c.startAnimation(1658);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 11694: // ags
c.startAnimation(7074);
c.specDamage = 1.25;
c.specAccuracy = 1.85;
c.gfx0(1222);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 19780: // korasi sword
c.gfx0(1247);
c.startAnimation(4000);
if (c.playerIndex > 0) {
Client opp = (Client) Server.playerHandler.players[c.playerIndex];
if (opp != null)
opp.gfx0(1248);
} else if (c.npcIndex > 0) {
NPC opp = Server.npcHandler.npcs[c.npcIndex];
if (opp != null)
opp.gfx0(1248);
}
c.specAccuracy = 5.00;
c.specDamage = 2.00;
c.ssSpec = true;
c.hitDelay = getHitDelay(c.getItems()
.getItemName(c.playerEquipment[c.playerWeapon])
.toLowerCase());
break;
case 11700:
c.startAnimation(4302);
c.gfx0(1221);
c.specAccuracy = 1.25;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.specEffect = 2;
break;
case 11696:
c.startAnimation(4301);
c.gfx0(1223);
c.specDamage = 1.10;
c.specAccuracy = 1.5;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.specEffect = 3;
break;
case 11698:
c.startAnimation(4303);
c.gfx0(1220);
c.specAccuracy = 1.25;
c.specEffect = 4;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 1249:
c.startAnimation(405);
c.gfx100(253);
if (c.playerIndex > 0) {
Client o = (Client)Server.playerHandler.players[i];
o.getPA().getSpeared(c.absX, c.absY);
}
break;
case 3204: // d hally
c.gfx100(282);
c.startAnimation(1203);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if(Server.npcHandler.npcs[i] != null && c.npcIndex > 0) {
if(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1)){
c.doubleHit = true;
}
}
if(Server.playerHandler.players[i] != null && c.playerIndex > 0) {
if(!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(),Server.playerHandler.players[i].getY(), 1)){
c.doubleHit = true;
c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
}
}
break;
case 4153: // maul
c.startAnimation(1667);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
/*if (c.playerIndex > 0)
gmaulPlayer(i);
else
gmaulNpc(i);*/
c.gfx100(337);
break;
case 4587: // dscimmy
c.gfx100(347);
c.specEffect = 1;
c.startAnimation(1872);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
break;
case 19784: // korasi sword
Random r = new Random();
c.startAnimation(4000);
c.gfx0(1247);
final double multiplier = r.nextDouble() + 0.5;
if (c.playerIndex > 0) {
final Client o = (Client) PlayerHandler.players[c.playerIndex];
EventManager.getSingleton().addEvent(new Event() {
int timer = 1;
public void execute(EventContainer c) {
if(c == null)
c.stop();
switch(timer) {
case 1:
o.gfx0(1248);
break;
case 0:
pvpMageDamage((int) (calculateMeleeMaxHit() * multiplier));
c.stop();
break;
}
timer--;
}
}, 600);
c.attackTimer = 5;
} else if (c.npcIndex > 0) {
final NPC n = NPCHandler.npcs[c.npcIndex];
EventManager.getSingleton().addEvent(new Event() {
int timer = 1;
public void execute(EventContainer c) {
if(c == null)
c.stop();
switch(timer) {
case 1:
n.gfx0(1248);
break;
case 0:
npcMageDamage((int) (calculateMeleeMaxHit() * multiplier));
c.stop();
break;
}
timer--;
}
}, 600);
c.attackTimer = 5;
}
break;
case 1434: // mace
c.startAnimation(1060);
c.gfx100(251);
c.specMaxHitIncrease = 3;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase())+1;
c.specDamage = 1.35;
c.specAccuracy = 1.15;
break;
case 859: // magic long
c.usingBow = true;
c.bowSpecShot = 3;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(426);
c.gfx100(250);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
if (c.fightMode == 2)
c.attackTimer--;
break;
case 861: // magic short
c.usingBow = true;
c.bowSpecShot = 1;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.startAnimation(1074);
c.hitDelay = 3;
c.projectileStage = 1;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
c.attackTimer--;
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
break;
case 11235: // dark bow
c.usingBow = true;
c.dbowSpec = true;
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
c.getItems().deleteArrow();
c.lastWeaponUsed = weapon;
c.hitDelay = 3;
c.startAnimation(426);
c.projectileStage = 1;
c.gfx100(getRangeStartGFX());
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if (c.fightMode == 2)
c.attackTimer--;
if (c.playerIndex > 0)
fireProjectilePlayer();
else if (c.npcIndex > 0)
fireProjectileNpc();
c.specAccuracy = 1.75;
c.specDamage = 1.50;
break;
}
if (!c.usingSpecial) {
c.doubleHit = false;
return;
}
c.delayedDamage = Misc.random(calculateMeleeMaxHit());
c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
c.usingSpecial = false;
c.getItems().updateSpecialBar();
}