{
ssGrade = weaponItem.getCrystalType();
}
// Create a Server->Client packet Attack
Attack attack = new Attack(this, wasSSCharged, ssGrade);
boolean hitted;
// Set the Attacking Body part to CHEST
setAttackingBodypart();
// Heading calculation on every attack
this.setHeading(Util.calculateHeadingFrom(this.getX(), this.getY(), target.getX(), target.getY()));
// Get the Attack Reuse Delay of the L2Weapon
int reuse = calculateReuseTime(target, weaponItem);
// Select the type of attack to start
if(weaponItem == null)
{
hitted = doAttackHitSimple(attack, target, timeToHit);
}
else if(weaponItem.getItemType() == L2WeaponType.BOW)
{
hitted = doAttackHitByBow(attack, target, timeAtk, reuse);
}
else if(weaponItem.getItemType() == L2WeaponType.POLE)
{
hitted = doAttackHitByPole(attack, timeToHit);
}
else if(isUsingDualWeapon())
{
hitted = doAttackHitByDual(attack, target, timeToHit);
}
else
{
hitted = doAttackHitSimple(attack, target, timeToHit);
}
// Flag the attacker if it's a L2PcInstance outside a PvP area
L2PcInstance player = null;
if(this instanceof L2PcInstance)
{
player = (L2PcInstance) this;
}
else if(this instanceof L2Summon)
{
player = ((L2Summon) this).getOwner();
}
if(player != null)
{
player.updatePvPStatus(target);
}
// Check if hit isn't missed
if(!hitted)
{
//MAJAX fix
sendPacket(new SystemMessage(SystemMessageId.MISSED_TARGET));
// Abort the attack of the L2Character and send Server->Client ActionFailed packet
abortAttack();
}
else
{
/* ADDED BY nexus - 2006-08-17
*
* As soon as we know that our hit landed, we must discharge any active soulshots.
* This must be done so to avoid unwanted soulshot consumption.
*/
// If we didn't miss the hit, discharge the shoulshots, if any
if(this instanceof L2Summon && !(this instanceof L2PetInstance))
{
((L2Summon) this).setChargedSoulShot(L2ItemInstance.CHARGED_NONE);
}
else if(weaponInst != null)
{
weaponInst.setChargedSoulshot(L2ItemInstance.CHARGED_NONE);
}
if(player != null)
{
if(player.isCursedWeaponEquiped())
{
// If hitted by a cursed weapon, Cp is reduced to 0
if(!target.isInvul())
{
target.setCurrentCp(0);
}
}
else if(player.isHero())
{
if(target instanceof L2PcInstance && ((L2PcInstance) target).isCursedWeaponEquiped())
{
// If a cursed weapon is hitted by a Hero, Cp is reduced to 0
target.setCurrentCp(0);
}
}
}
weaponInst = null;
weaponItem = null;
}
// If the Server->Client packet Attack contains at least 1 hit, send the Server->Client packet Attack
// to the L2Character AND to all L2PcInstance in the _KnownPlayers of the L2Character
if(attack.hasHits())
{
broadcastPacket(attack);
fireEvent(EventType.ATTACK.name, new Object[]
{
getTarget()