When i'm using 2-handed sword (or any melee weapon) my soulshot wont load properly.Every 2-3 hits i miss 1 soulshot (less dmg)
How can i change the soulshot re-load time?I looked over here:
final int timeAtk = calculateTimeBetweenAttacks(target, weaponItem);
// Recharge any active auto soulshot tasks for player (or player's summon if one exists).
if (this instanceof L2PcInstance)
{
((L2PcInstance) this).rechargeAutoSoulShot(true, false, false, timeAtk);
}
else if (this instanceof L2Summon)
{
((L2Summon) this).getOwner().rechargeAutoSoulShot(true, false, true, timeAtk);
}
// Verify if soulshots are charged.
boolean wasSSCharged;
if (this instanceof L2Summon && !(this instanceof L2PetInstance))
{
wasSSCharged = ((L2Summon) this).getChargedSoulShot() != L2ItemInstance.CHARGED_NONE;
}
else
{
wasSSCharged = weaponInst != null && weaponInst.getChargedSoulshot() != L2ItemInstance.CHARGED_NONE;
}
// Get the Attack Speed of the L2Character (delay (in milliseconds) before next attack)
// the hit is calculated to happen halfway to the animation - might need further tuning e.g. in bow case
final int timeToHit = timeAtk / 2;
_attackEndTime = GameTimeController.getGameTicks();
_attackEndTime += (timeAtk / GameTimeController.MILLIS_IN_TICK);
_attackEndTime -= 1;
int ssGrade = 0;
if (weaponItem != null)
{
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
final 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()
});
}
// Like L2OFF mobs id 27181 can teleport players near cabrio
if (this instanceof L2MonsterInstance && ((L2MonsterInstance) this).getNpcId() == 27181)
{
final int rndNum = Rnd.get(100);
final L2PcInstance gettarget = (L2PcInstance) this.getTarget();
if (rndNum < 5 && gettarget != null)
gettarget.teleToLocation(179768, 6364, -2734);
}
// Like L2OFF if target is not auto attackable you give only one hit
if (this instanceof L2PcInstance && target instanceof L2PcInstance && !target.isAutoAttackable(this))
{
((L2PcInstance) this).getAI().clientStopAutoAttack();
((L2PcInstance) this).getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, this);
}
// Notify AI with EVT_READY_TO_ACT
ThreadPoolManager.getInstance().scheduleAi(new NotifyAITask(CtrlEvent.EVT_READY_TO_ACT), timeAtk + reuse);
attack = null;
player = null;
}
⏳ L2Elixir Open Beta goes live in less than 4 hours!
This Saturday, November 15th at 21:00 (UTC +2), the gates open for our biggest testing phase!
🔥 Don’t miss the first 30 minutes — exclusive rewards await!
A special NPC, “The Judge”, will appear in Giran, offering unique bonuses to early participants:
🏅 Open Beta Rewards:
- The first 2 players who talk to The Judge → Premium Account for Launch
- Another 2 random players who interact → Premium Account
- Everyone who speaks to the NPC within the first 30 minutes → Legendary Starter Pack for all characters on launch day (Nov 28th, 2025)
📌 The NPC will spawn exactly at 21:00 (UTC+2).
⏱️ Follow the countdown on our website — the hype is real!
Create your account & download the Updater to be ready!
🔗 https://l2elixir.org/connect/
💬 Discord: https://discord.gg/5ydPHvhbxs
Question
lewnidasds
Hello everyone!
I'm using l2j Frozen and i have soulshot issue.
When i'm using 2-handed sword (or any melee weapon) my soulshot wont load properly.Every 2-3 hits i miss 1 soulshot (less dmg)
How can i change the soulshot re-load time?I looked over here:
final int timeAtk = calculateTimeBetweenAttacks(target, weaponItem); // Recharge any active auto soulshot tasks for player (or player's summon if one exists). if (this instanceof L2PcInstance) { ((L2PcInstance) this).rechargeAutoSoulShot(true, false, false, timeAtk); } else if (this instanceof L2Summon) { ((L2Summon) this).getOwner().rechargeAutoSoulShot(true, false, true, timeAtk); } // Verify if soulshots are charged. boolean wasSSCharged; if (this instanceof L2Summon && !(this instanceof L2PetInstance)) { wasSSCharged = ((L2Summon) this).getChargedSoulShot() != L2ItemInstance.CHARGED_NONE; } else { wasSSCharged = weaponInst != null && weaponInst.getChargedSoulshot() != L2ItemInstance.CHARGED_NONE; } // Get the Attack Speed of the L2Character (delay (in milliseconds) before next attack) // the hit is calculated to happen halfway to the animation - might need further tuning e.g. in bow case final int timeToHit = timeAtk / 2; _attackEndTime = GameTimeController.getGameTicks(); _attackEndTime += (timeAtk / GameTimeController.MILLIS_IN_TICK); _attackEndTime -= 1; int ssGrade = 0; if (weaponItem != null) { 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 final 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() }); } // Like L2OFF mobs id 27181 can teleport players near cabrio if (this instanceof L2MonsterInstance && ((L2MonsterInstance) this).getNpcId() == 27181) { final int rndNum = Rnd.get(100); final L2PcInstance gettarget = (L2PcInstance) this.getTarget(); if (rndNum < 5 && gettarget != null) gettarget.teleToLocation(179768, 6364, -2734); } // Like L2OFF if target is not auto attackable you give only one hit if (this instanceof L2PcInstance && target instanceof L2PcInstance && !target.isAutoAttackable(this)) { ((L2PcInstance) this).getAI().clientStopAutoAttack(); ((L2PcInstance) this).getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, this); } // Notify AI with EVT_READY_TO_ACT ThreadPoolManager.getInstance().scheduleAi(new NotifyAITask(CtrlEvent.EVT_READY_TO_ACT), timeAtk + reuse); attack = null; player = null; }I dont know if i'm looking right.
Thanks for the help!
3 answers to this question
Recommended Posts