From c84cab70b491df6df9248d9f1de4b63780336981 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 25 Jun 2019 01:17:54 +0000 Subject: [PATCH] SpiritShot recharge fix and related cleanups. --- .../gameserver/model/actor/Creature.java | 29 ++++----- .../model/actor/instance/PlayerInstance.java | 13 +--- .../clientpackets/RequestAutoSoulShot.java | 53 ++++++++-------- .../network/clientpackets/UseItem.java | 60 ++++++++++--------- 4 files changed, 74 insertions(+), 81 deletions(-) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java index e5ba9558db..a95de953bb 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -1082,7 +1082,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder // Verify if soulshots are charged. boolean wasSSCharged; - if ((this instanceof Summon) && !(this instanceof PetInstance)) { wasSSCharged = ((Summon) this).getChargedSoulShot() != ItemInstance.CHARGED_NONE; @@ -1101,7 +1100,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder _attackEndTime -= 1; int ssGrade = 0; - if (weaponItem != null) { ssGrade = weaponItem.getCrystalType(); @@ -1651,6 +1649,17 @@ public abstract class Creature extends WorldObject implements ISkillsHolder ((Summon) creature).getOwner().rechargeAutoSoulShot(true, false, true); } } + if (skill.useSpiritShot()) + { + if (creature instanceof PlayerInstance) + { + ((PlayerInstance) creature).rechargeAutoSoulShot(false, true, false); + } + else if (this instanceof Summon) + { + ((Summon) creature).getOwner().rechargeAutoSoulShot(false, true, true); + } + } // Get all possible targets of the skill in a table in function of the skill target type final WorldObject[] targets = skill.getTargetList(creature); @@ -10082,9 +10091,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder public boolean checkBss() { boolean bss = false; - final ItemInstance weaponInst = getActiveWeaponInstance(); - if (weaponInst != null) { if (weaponInst.getChargedSpiritshot() == ItemInstance.CHARGED_BLESSED_SPIRITSHOT) @@ -10102,7 +10109,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder bss = true; } } - return bss; } @@ -10112,7 +10118,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder public synchronized void removeBss() { final ItemInstance weaponInst = getActiveWeaponInstance(); - if (weaponInst != null) { if (weaponInst.getChargedSpiritshot() == ItemInstance.CHARGED_BLESSED_SPIRITSHOT) @@ -10124,13 +10129,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder else if (this instanceof Summon) { final Summon activeSummon = (Summon) this; - if (activeSummon.getChargedSpiritShot() == ItemInstance.CHARGED_BLESSED_SPIRITSHOT) { activeSummon.setChargedSpiritShot(ItemInstance.CHARGED_NONE); } } - reloadShots(true); } @@ -10141,9 +10144,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder public boolean checkSps() { boolean ss = false; - final ItemInstance weaponInst = getActiveWeaponInstance(); - if (weaponInst != null) { if (weaponInst.getChargedSpiritshot() == ItemInstance.CHARGED_SPIRITSHOT) @@ -10161,7 +10162,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder ss = true; } } - return ss; } @@ -10171,7 +10171,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder public synchronized void removeSps() { final ItemInstance weaponInst = getActiveWeaponInstance(); - if (weaponInst != null) { if (weaponInst.getChargedSpiritshot() == ItemInstance.CHARGED_SPIRITSHOT) @@ -10183,13 +10182,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder else if (this instanceof Summon) { final Summon activeSummon = (Summon) this; - if (activeSummon.getChargedSpiritShot() == ItemInstance.CHARGED_SPIRITSHOT) { activeSummon.setChargedSpiritShot(ItemInstance.CHARGED_NONE); } } - reloadShots(true); } @@ -10200,9 +10197,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder public boolean checkSs() { boolean ss = false; - final ItemInstance weaponInst = getActiveWeaponInstance(); - if (weaponInst != null) { if (weaponInst.getChargedSoulshot() == ItemInstance.CHARGED_SOULSHOT) @@ -10220,7 +10215,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder ss = true; } } - return ss; } @@ -10230,7 +10224,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder public void removeSs() { final ItemInstance weaponInst = getActiveWeaponInstance(); - if (weaponInst != null) { if (weaponInst.getChargedSoulshot() == ItemInstance.CHARGED_SOULSHOT) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 1b6717f84e..bdf7cf3c00 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2940,12 +2940,10 @@ public final class PlayerInstance extends Playable { for (ItemInstance ss : getInventory().getItems()) { - final int _itemId = ss.getItemId(); - - if ((((_itemId >= 2509) && (_itemId <= 2514)) || ((_itemId >= 3947) && (_itemId <= 3952)) || ((_itemId <= 1804) && (_itemId >= 1808)) || (_itemId == 5789) || (_itemId == 5790) || (_itemId == 1835)) && (ss.getItem().getCrystalType() == unequipped.getItem().getCrystalType())) + final int itemId = ss.getItemId(); + if ((((itemId >= 2509) && (itemId <= 2514)) || ((itemId >= 3947) && (itemId <= 3952)) || ((itemId <= 1804) && (itemId >= 1808)) || (itemId == 5789) || (itemId == 5790) || (itemId == 1835)) && (ss.getItem().getCrystalType() == unequipped.getItem().getCrystalType())) { - sendPacket(new ExAutoSoulShot(_itemId, 0)); - + sendPacket(new ExAutoSoulShot(itemId, 0)); final SystemMessage sm = new SystemMessage(SystemMessageId.AUTO_USE_OF_S1_CANCELLED); sm.addString(ss.getItemName()); sendPacket(sm); @@ -12129,7 +12127,6 @@ public final class PlayerInstance extends Playable for (int itemId : _activeSoulShots.values()) { item = getInventory().getItemByItemId(itemId); - if (item != null) { if (magic) @@ -12139,7 +12136,6 @@ public final class PlayerInstance extends Playable if ((itemId == 2509) || (itemId == 2510) || (itemId == 2511) || (itemId == 2512) || (itemId == 2513) || (itemId == 2514) || (itemId == 3947) || (itemId == 3948) || (itemId == 3949) || (itemId == 3950) || (itemId == 3951) || (itemId == 3952) || (itemId == 5790)) { handler = ItemHandler.getInstance().getItemHandler(itemId); - if (handler != null) { handler.useItem(this, item); @@ -12149,7 +12145,6 @@ public final class PlayerInstance extends Playable else if ((itemId == 6646) || (itemId == 6647)) { handler = ItemHandler.getInstance().getItemHandler(itemId); - if (handler != null) { handler.useItem(this, item); @@ -12164,7 +12159,6 @@ public final class PlayerInstance extends Playable if ((itemId == 1463) || (itemId == 1464) || (itemId == 1465) || (itemId == 1466) || (itemId == 1467) || (itemId == 1835) || (itemId == 5789)) { handler = ItemHandler.getInstance().getItemHandler(itemId); - if (handler != null) { handler.useItem(this, item); @@ -12174,7 +12168,6 @@ public final class PlayerInstance extends Playable else if (itemId == 6645) { handler = ItemHandler.getInstance().getItemHandler(itemId); - if (handler != null) { handler.useItem(this, item); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestAutoSoulShot.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestAutoSoulShot.java index 77f11da007..db0bdee617 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestAutoSoulShot.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestAutoSoulShot.java @@ -16,7 +16,8 @@ */ package org.l2jmobius.gameserver.network.clientpackets; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; import org.l2jmobius.gameserver.model.actor.instance.ItemInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -30,6 +31,31 @@ public final class RequestAutoSoulShot extends GameClientPacket private int _itemId; private int _type; // 1 = on : 0 = off; + private static final List SHOT_IDS = new ArrayList<>(); + static + { + SHOT_IDS.add(5789); + SHOT_IDS.add(1835); + SHOT_IDS.add(1463); + SHOT_IDS.add(1464); + SHOT_IDS.add(1465); + SHOT_IDS.add(1466); + SHOT_IDS.add(1467); + SHOT_IDS.add(5790); + SHOT_IDS.add(2509); + SHOT_IDS.add(2510); + SHOT_IDS.add(2511); + SHOT_IDS.add(2512); + SHOT_IDS.add(2513); + SHOT_IDS.add(2514); + SHOT_IDS.add(3947); + SHOT_IDS.add(3948); + SHOT_IDS.add(3949); + SHOT_IDS.add(3950); + SHOT_IDS.add(3951); + SHOT_IDS.add(3952); + } + @Override protected void readImpl() { @@ -48,30 +74,7 @@ public final class RequestAutoSoulShot extends GameClientPacket } // Like L2OFF you can't use soulshots while sitting - final int[] shots_ids = - { - 5789, - 1835, - 1463, - 1464, - 1465, - 1466, - 1467, - 5790, - 2509, - 2510, - 2511, - 2512, - 2513, - 2514, - 3947, - 3948, - 3949, - 3950, - 3951, - 3952 - }; - if (player.isSitting() && Arrays.toString(shots_ids).contains(String.valueOf(_itemId))) + if (player.isSitting() && SHOT_IDS.contains(_itemId)) { final SystemMessage sm = new SystemMessage(SystemMessageId.CANNOT_AUTO_USE_LACK_OF_S1); sm.addItemName(_itemId); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/UseItem.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/UseItem.java index ad0d2ff9b8..9d2961dbff 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/UseItem.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/UseItem.java @@ -16,7 +16,9 @@ */ package org.l2jmobius.gameserver.network.clientpackets; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.l2jmobius.Config; import org.l2jmobius.gameserver.ai.CtrlIntention; @@ -47,6 +49,31 @@ public final class UseItem extends GameClientPacket { private int _objectId; + private static final List SHOT_IDS = new ArrayList<>(); + static + { + SHOT_IDS.add(5789); + SHOT_IDS.add(1835); + SHOT_IDS.add(1463); + SHOT_IDS.add(1464); + SHOT_IDS.add(1465); + SHOT_IDS.add(1466); + SHOT_IDS.add(1467); + SHOT_IDS.add(5790); + SHOT_IDS.add(2509); + SHOT_IDS.add(2510); + SHOT_IDS.add(2511); + SHOT_IDS.add(2512); + SHOT_IDS.add(2513); + SHOT_IDS.add(2514); + SHOT_IDS.add(3947); + SHOT_IDS.add(3948); + SHOT_IDS.add(3949); + SHOT_IDS.add(3950); + SHOT_IDS.add(3951); + SHOT_IDS.add(3952); + } + @Override protected void readImpl() { @@ -68,31 +95,8 @@ public final class UseItem extends GameClientPacket return; } - // Like L2OFF you can't use soulshots while sitting - final int[] shots_ids = - { - 5789, - 1835, - 1463, - 1464, - 1465, - 1466, - 1467, - 5790, - 2509, - 2510, - 2511, - 2512, - 2513, - 2514, - 3947, - 3948, - 3949, - 3950, - 3951, - 3952 - }; - if (player.isSitting() && Arrays.toString(shots_ids).contains(String.valueOf(item.getItemId()))) + // Like L2OFF you can't use soulshots while sitting. + if (player.isSitting() && SHOT_IDS.contains(item.getItemId())) { final SystemMessage sm = new SystemMessage(SystemMessageId.CANNOT_AUTO_USE_LACK_OF_S1); sm.addItemName(item.getItemId()); @@ -114,7 +118,7 @@ public final class UseItem extends GameClientPacket } if (player.isStunned() || player.isConfused() || player.isAway() || player.isParalyzed() || player.isSleeping()) { - player.sendMessage("You Cannot Use Items Right Now."); + player.sendMessage("You cannot use items right now."); return; } @@ -425,8 +429,8 @@ public final class UseItem extends GameClientPacket SystemMessage sm = null; if (item.getItem().getType2() == Item.TYPE2_WEAPON) - { // if used item is a weapon - + { + // if used item is a weapon ItemInstance wep = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LRHAND); if (wep == null) {