Jump to content
  • 0

Question

Posted

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

  • 0
Posted

if (this instanceof L2PcInstance)
        {
            ((L2PcInstance) this).rechargeAutoSoulShot(true, false, false, timeAtk + 5);
        }
        else if (this instanceof L2Summon)
        {
            ((L2Summon) this).getOwner().rechargeAutoSoulShot(true, false, true, timeAtk + 5);
        }
        

Guest
This topic is now closed to further replies.


  • Posts

    • 🌟 L2Avalon – Interlude Rework x20 – Grand Opening July 4! 🌟 📅 Server Launch: Open Beta: June 26, 18:00 GMT+3 Grand Opening: July 4, 2025 📦 Chronicle & Client: Reworked Interlude (based on latest High Five features) Custom launcher with up-to-date client support ⚔️ Rates & Progression: EXP/SP: Lv 1–39: x20 Lv 40–52: x15 Lv 52–60: x10 Lv 61–70: x8 Lv 71–75: x5 Lv 76–79: x4 → x3 Lv 80+: x2 Adena: x1 (subject to adjustment) Drop/Spoil/Raid Drop: x5 Quest Drop: custom Party Bonus: up to +290% EXP 🛠️ Core Features: Auto-loot (normal drops) Auto-learn skills up to level 75 High Five-style skill system with full rebalancing Passive MP regen: +1000 MP / 15s Inventory space: 150 slots Weight limit increased Auto CP/HP/MP potions Global chat from level 40 (!), offline shop (.offline), buff selling system (.sellbuff) 🔼 Class Progression: 1st & 2nd class: Free 3rd class: Kill 700 mobs → get 1 Giant Codex Subclass: Custom quest + 4 raid bosses + 1000 B-grade Crystals Noblesse: Either via Caradine's Letter (Lv 65+) or Noblesse box from raid bosses 🏪 NPC Shops & Support: GM Shop: Full D/C gear, Low B gear Luxury Shop: TOP B gear Donation Shop: Cosmetics, premium, etc. NPC Buffer: Save & load buff schemes (premium buffs for Premium Account) Mammon functions via NPC in Giran (unseal, augment, etc.) Offline Traders, Coin of Luck auction system Special blacksmiths and unique item services 💡 Why L2Avalon? Balanced seasonal x20 rates – smooth and long-term growth Quality-of-life systems for casual & hardcore players alike Custom skill system, refined raid rewards, and unique gear upgrades Active community, continuous development, and fair monetization Beta rewards & early start advantage 🔗 Useful Links: 🌐 Website: https://www.l2avalon.net 📘 Full Server Info: https://l2avalon-net.gitbook.io/info 💬 Discord: https://discord.gg/NbM2cXmAem 📝 Join the adventure this July! Prepare your characters during Beta and get rewarded at launch!  
    • You spent over a month calling a lot of people names. I get that you want to change, but it will take a lot more than this for me to believe its sincere. And honestly, for your apology to matter, I'd have to care enough to be offended in the first place.
    • we all love you very much Guytis💖 🤗
    • W/e u smoke there, i want aswell... life has been cruel all this time! Maybe it will help me
    • I would like to take this opportunity to publicly apologize to the following people:   @Acacia, @Victory, @Splicho, @ShadowNetwork, @l2gold2025, @SkyLord, @maneco, @F4sh10n, @Maxtor, @Celestine, @911reg, @Nightw0lf. @UnknownSoldier   If at any point my words, actions, or posts offended you, I sincerely apologize. I recognize that in the past there were moments of tension and unnecessary conflict, but today I want to leave all of that behind. From now on, I choose not to hold any grudges against anyone and to let go of everything that happened — from both sides. The path I want to follow in this community is one of collaboration, mutual respect, and growth. Thank you to those who are still contributing and sharing. Sincerely,   Guytis
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock