From 680902f39d9c2c2679432ebea8f6328ba80ebb9d Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sun, 31 Jul 2022 02:09:39 +0000 Subject: [PATCH] Apply item skills to all playables. --- .../gameserver/cache/PaperdollCache.java | 5 +- .../l2jmobius/gameserver/model/ArmorSet.java | 35 ++-- .../gameserver/model/VariationInstance.java | 14 +- .../model/holders/ArmorsetSkillHolder.java | 24 +-- .../model/itemcontainer/Inventory.java | 170 ++++++++++-------- .../gameserver/model/options/Options.java | 56 +++--- .../gameserver/cache/PaperdollCache.java | 5 +- .../l2jmobius/gameserver/model/ArmorSet.java | 35 ++-- .../gameserver/model/VariationInstance.java | 14 +- .../model/holders/ArmorsetSkillHolder.java | 24 +-- .../model/itemcontainer/Inventory.java | 170 ++++++++++-------- .../gameserver/model/options/Options.java | 56 +++--- .../gameserver/cache/PaperdollCache.java | 5 +- .../l2jmobius/gameserver/model/ArmorSet.java | 35 ++-- .../gameserver/model/VariationInstance.java | 14 +- .../model/holders/ArmorsetSkillHolder.java | 24 +-- .../model/itemcontainer/Inventory.java | 170 ++++++++++-------- .../gameserver/model/options/Options.java | 56 +++--- .../gameserver/cache/PaperdollCache.java | 5 +- .../l2jmobius/gameserver/model/ArmorSet.java | 35 ++-- .../gameserver/model/VariationInstance.java | 14 +- .../model/holders/ArmorsetSkillHolder.java | 24 +-- .../model/itemcontainer/Inventory.java | 170 ++++++++++-------- .../gameserver/model/options/Options.java | 56 +++--- 24 files changed, 656 insertions(+), 560 deletions(-) diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/cache/PaperdollCache.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/cache/PaperdollCache.java index cccadc634c..4b05ef78ab 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/cache/PaperdollCache.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/cache/PaperdollCache.java @@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.data.xml.ArmorSetData; import org.l2jmobius.gameserver.model.ArmorSet; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.stats.BaseStat; @@ -82,7 +83,7 @@ public final class PaperdollCache return value; } - public int getMaxSetEnchant(Player player) + public int getMaxSetEnchant(Playable playable) { if (_maxSetEnchant >= 0) { @@ -94,7 +95,7 @@ public final class PaperdollCache { for (ArmorSet set : ArmorSetData.getInstance().getSets(item.getId())) { - final int enchantEffect = set.getLowestSetEnchant(player); + final int enchantEffect = set.getLowestSetEnchant(playable); if (enchantEffect > maxSetEnchant) { maxSetEnchant = enchantEffect; diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ArmorSet.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ArmorSet.java index b413b5e89a..36fd25aacf 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ArmorSet.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ArmorSet.java @@ -22,11 +22,10 @@ import java.util.Set; import java.util.function.Function; import org.l2jmobius.commons.util.CommonUtil; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Inventory; -import org.l2jmobius.gameserver.model.itemcontainer.PlayerInventory; import org.l2jmobius.gameserver.model.stats.BaseStat; /** @@ -162,18 +161,18 @@ public class ArmorSet } /** - * @param player + * @param playable * @return true if all parts of set are enchanted to +6 or more */ - public int getLowestSetEnchant(Player player) + public int getLowestSetEnchant(Playable playable) { - // Player don't have full set - if (getPiecesCountById(player) < _minimumPieces) + // Playable don't have full set + if (getPiecesCountById(playable) < _minimumPieces) { return 0; } - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int enchantLevel = Byte.MAX_VALUE; for (int armorSlot : ARMORSET_SLOTS) { @@ -192,13 +191,13 @@ public class ArmorSet /** * Condition for 3 Lv. Set Effect Applied Skill - * @param player + * @param playable * @param bookSlot * @return total paperdoll(busy) count for 1 of 3 artifact book slots */ - public int getArtifactSlotMask(Player player, int bookSlot) + public int getArtifactSlotMask(Playable playable, int bookSlot) { - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int slotMask = 0; switch (bookSlot) { @@ -242,23 +241,23 @@ public class ArmorSet return slotMask; } - public boolean hasOptionalEquipped(Player player, Function idProvider) + public boolean hasOptionalEquipped(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); } /** - * @param player + * @param playable * @param idProvider - * @return the amount of set visual items that player has equipped + * @return the amount of set visual items that playable has equipped */ - public long getPiecesCount(Player player, Function idProvider) + public long getPiecesCount(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); } - public long getPiecesCountById(Player player) + public long getPiecesCountById(Playable playable) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java index d8428a77f7..55f34c8485 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model; import org.l2jmobius.gameserver.data.xml.OptionData; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.options.Options; /** @@ -59,27 +59,27 @@ public class VariationInstance return _option2 == null ? -1 : _option2.getId(); } - public void applyBonus(Player player) + public void applyBonus(Playable playable) { if (_option1 != null) { - _option1.apply(player); + _option1.apply(playable); } if (_option2 != null) { - _option2.apply(player); + _option2.apply(playable); } } - public void removeBonus(Player player) + public void removeBonus(Playable playable) { if (_option1 != null) { - _option1.remove(player); + _option1.remove(playable); } if (_option2 != null) { - _option2.remove(player); + _option2.remove(playable); } } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java index b18ff0fce9..38fd11a4f6 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.holders; import java.util.function.Function; import org.l2jmobius.gameserver.model.ArmorSet; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.item.instance.Item; /** @@ -58,34 +58,34 @@ public class ArmorsetSkillHolder extends SkillHolder return _isOptional; } - public boolean validateConditions(Player player, ArmorSet armorSet, Function idProvider) + public boolean validateConditions(Playable playable, ArmorSet armorSet, Function idProvider) { - // Player's doesn't have full busy (1 of 3) artifact real slot - if (_artifactSlotMask > armorSet.getArtifactSlotMask(player, _artifactBookSlot)) + // Playable doesn't have full busy (1 of 3) artifact real slot + if (_artifactSlotMask > armorSet.getArtifactSlotMask(playable, _artifactBookSlot)) { return false; } - // Player doesn't have enough items equipped to use this skill - if (_minimumPieces > armorSet.getPiecesCount(player, idProvider)) + // Playable doesn't have enough items equipped to use this skill + if (_minimumPieces > armorSet.getPiecesCount(playable, idProvider)) { return false; } - // Player's set enchantment isn't enough to use this skill - if (_minEnchant > armorSet.getLowestSetEnchant(player)) + // Playable set enchantment isn't enough to use this skill + if (_minEnchant > armorSet.getLowestSetEnchant(playable)) { return false; } - // Player doesn't have the required item to use this skill - if (_isOptional && !armorSet.hasOptionalEquipped(player, idProvider)) + // Playable doesn't have the required item to use this skill + if (_isOptional && !armorSet.hasOptionalEquipped(playable, idProvider)) { return false; } - // Player already knows that skill - if (player.getSkillLevel(getSkillId()) == getSkillLevel()) + // Playable already knows that skill + if (playable.getSkillLevel(getSkillId()) == getSkillLevel()) { return false; } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 6c0e62a467..71e905f40e 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -51,6 +51,7 @@ import org.l2jmobius.gameserver.model.ArmorSet; import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip; @@ -310,12 +311,12 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final ItemTemplate it = item.getTemplate(); final Map addedSkills = new HashMap<>(1); final Map removedSkills = new HashMap<>(1); @@ -325,11 +326,11 @@ public abstract class Inventory extends ItemContainer // Remove augmentation bonuses on unequip if (item.isAugmented()) { - item.getAugmentation().removeBonus(player); + item.getAugmentation().removeBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Clear enchant bonus item.clearEnchantStats(); @@ -406,7 +407,7 @@ public abstract class Inventory extends ItemContainer for (ItemSkillHolder holder : otherNormalSkills) { - if (player.getSkillLevel(holder.getSkillId()) != 0) + if (playable.getSkillLevel(holder.getSkillId()) != 0) { continue; } @@ -430,13 +431,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -477,7 +478,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -496,7 +497,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -506,12 +507,12 @@ public abstract class Inventory extends ItemContainer } // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. - for (Skill skill : player.getAllSkills()) + for (Skill skill : playable.getAllSkills()) { - if ((skill.isToggle() && player.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, player, player)) // + if ((skill.isToggle() && playable.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, playable, playable)) // || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { - player.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); + playable.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); update = true; } } @@ -519,55 +520,58 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on unequip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); + it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (update) { for (Skill skill : removedSkills.values()) { - player.removeSkill(skill, false, skill.isPassive()); + playable.removeSkill(skill, skill.isPassive()); } for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } if (item.isWeapon()) { - player.unchargeAllShots(); + playable.unchargeAllShots(); } } @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final Map addedSkills = new HashMap<>(1); boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) { - item.getAugmentation().applyBonus(player); + item.getAugmentation().applyBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Apply enchant stats item.applyEnchantStats(); @@ -582,7 +586,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -599,7 +603,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -626,7 +630,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -643,7 +647,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -669,7 +673,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : normalSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -681,7 +685,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -699,13 +703,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -732,7 +736,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -749,7 +753,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -773,7 +777,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -787,7 +791,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -812,22 +816,25 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on equip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); + item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (!addedSkills.isEmpty()) { for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } } @@ -844,16 +851,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean update = false; // Verify and apply normal set - if (verifyAndApply(player, item, Item::getId)) + if (verifyAndApply(playable, item, Item::getId)) { update = true; } @@ -863,26 +870,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(playable, item, Item::getVisualId)) { update = true; } } - if (update) + if (update && playable.isPlayer()) { - player.sendSkillList(); + playable.getActingPlayer().sendSkillList(); } - if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) + if (playable.isPlayer() && ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH))) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } - private static boolean applySkills(Player player, Item item, ArmorSet armorSet, Function idProvider) + private static boolean applySkills(Playable playable, Item item, ArmorSet armorSet, Function idProvider) { - final long piecesCount = armorSet.getPiecesCount(player, idProvider); + final long piecesCount = armorSet.getPiecesCount(playable, idProvider); if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions @@ -890,12 +897,12 @@ public abstract class Inventory extends ItemContainer boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } - if (holder.validateConditions(player, armorSet, idProvider)) + if (holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -904,21 +911,21 @@ public abstract class Inventory extends ItemContainer continue; } - if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } - player.addSkill(itemSkill, false); + playable.addSkill(itemSkill); if (itemSkill.isActive() && (item != null)) { - if (!player.hasSkillReuse(itemSkill.getReuseHashCode())) + if (!playable.hasSkillReuse(itemSkill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(itemSkill, equipDelay); - player.disableSkill(itemSkill, equipDelay); + playable.addTimeStamp(itemSkill, equipDelay); + playable.disableSkill(itemSkill, equipDelay); } } updateTimeStamp = true; @@ -926,22 +933,22 @@ public abstract class Inventory extends ItemContainer update = true; } } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } return update; } return false; } - private static boolean verifyAndApply(Player player, Item item, Function idProvider) + private static boolean verifyAndApply(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); for (ArmorSet armorSet : armorSets) { - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -949,7 +956,7 @@ public abstract class Inventory extends ItemContainer return update; } - private static boolean verifyAndRemove(Player player, Item item, Function idProvider) + private static boolean verifyAndRemove(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); @@ -958,7 +965,7 @@ public abstract class Inventory extends ItemContainer // Remove all skills that doesn't matches the conditions for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (!holder.validateConditions(player, armorSet, idProvider)) + if (!holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -968,7 +975,7 @@ public abstract class Inventory extends ItemContainer } // Update if a skill has been removed. - if (player.removeSkill(itemSkill, false, itemSkill.isPassive()) != null) + if (playable.removeSkill(itemSkill, itemSkill.isPassive()) != null) { update = true; } @@ -976,7 +983,7 @@ public abstract class Inventory extends ItemContainer } // Attempt to apply lower level skills if possible - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -988,16 +995,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean remove = false; // Verify and remove normal set bonus - if (verifyAndRemove(player, item, Item::getId)) + if (verifyAndRemove(playable, item, Item::getId)) { remove = true; } @@ -1007,21 +1014,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(playable, item, Item::getVisualId)) { remove = true; } } + if (!playable.isPlayer()) + { + return; + } + if (remove) { - player.checkItemRestriction(); - player.sendSkillList(); + playable.getActingPlayer().checkItemRestriction(); + playable.getActingPlayer().sendSkillList(); } if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } } @@ -1189,6 +1201,7 @@ public abstract class Inventory extends ItemContainer { _paperdoll = new Item[PAPERDOLL_TOTALSLOTS]; _paperdollListeners = new ArrayList<>(); + if (this instanceof PlayerInventory) { addPaperdollListener(ArmorSetListener.getInstance()); @@ -1199,6 +1212,11 @@ public abstract class Inventory extends ItemContainer addPaperdollListener(AgathionBraceletListener.getInstance()); addPaperdollListener(ArtifactBookListener.getInstance()); } + else if (this instanceof PetInventory) + { + addPaperdollListener(ArmorSetListener.getInstance()); + addPaperdollListener(ItemSkillsListener.getInstance()); + } // common addPaperdollListener(StatsListener.getInstance()); @@ -2674,12 +2692,12 @@ public abstract class Inventory extends ItemContainer public int getArmorMinEnchant() { - if ((getOwner() == null) || !getOwner().isPlayer()) + if ((getOwner() == null) || !getOwner().isPlayable()) { return 0; } - final Player player = getOwner().getActingPlayer(); + final Playable player = (Playable) getOwner(); return _paperdollCache.getMaxSetEnchant(player); } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Options.java index 0299901a34..f223413b7e 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Options.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; import org.l2jmobius.gameserver.enums.SkillFinishType; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.Skill; @@ -157,11 +157,11 @@ public class Options _activationSkills.add(holder); } - public void apply(Player player) + public void apply(Playable playable) { if (hasEffects()) { - final BuffInfo info = new BuffInfo(player, player, null, true, null, this); + final BuffInfo info = new BuffInfo(playable, playable, null, true, null, this); for (AbstractEffect effect : _effects) { if (effect.isInstant()) @@ -174,7 +174,7 @@ public class Options else { effect.continuousInstant(info.getEffector(), info.getEffected(), info.getSkill(), info.getItem()); - effect.pump(player, info.getSkill()); + effect.pump(playable, info.getSkill()); if (effect.canStart(info.getEffector(), info.getEffected(), info.getSkill())) { info.addEffect(effect); @@ -183,44 +183,47 @@ public class Options } if (!info.getEffects().isEmpty()) { - player.getEffectList().add(info); + playable.getEffectList().add(info); } } if (hasActiveSkills()) { for (Skill skill : _activeSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.addTriggerSkill(holder); + playable.addTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - public void remove(Player player) + public void remove(Playable playable) { if (hasEffects()) { - for (BuffInfo info : player.getEffectList().getOptions()) + for (BuffInfo info : playable.getEffectList().getOptions()) { if (info.getOption() == this) { - player.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); + playable.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); } } } @@ -228,45 +231,48 @@ public class Options { for (Skill skill : _activeSkill) { - player.removeSkill(skill, false, false); + playable.removeSkill(skill, false); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - player.removeSkill(skill, false, true); + playable.removeSkill(skill, true); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.removeTriggerSkill(holder); + playable.removeTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - private void addSkill(Player player, Skill skill) + private void addSkill(Playable playable, Skill skill) { boolean updateTimeStamp = false; - player.addSkill(skill, false); + playable.addSkill(skill); if (skill.isActive()) { - final long remainingTime = player.getSkillRemainingReuseTime(skill.getReuseHashCode()); + final long remainingTime = playable.getSkillRemainingReuseTime(skill.getReuseHashCode()); if (remainingTime > 0) { - player.addTimeStamp(skill, remainingTime); - player.disableSkill(skill, remainingTime); + playable.addTimeStamp(skill, remainingTime); + playable.disableSkill(skill, remainingTime); } updateTimeStamp = true; } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/cache/PaperdollCache.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/cache/PaperdollCache.java index cccadc634c..4b05ef78ab 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/cache/PaperdollCache.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/cache/PaperdollCache.java @@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.data.xml.ArmorSetData; import org.l2jmobius.gameserver.model.ArmorSet; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.stats.BaseStat; @@ -82,7 +83,7 @@ public final class PaperdollCache return value; } - public int getMaxSetEnchant(Player player) + public int getMaxSetEnchant(Playable playable) { if (_maxSetEnchant >= 0) { @@ -94,7 +95,7 @@ public final class PaperdollCache { for (ArmorSet set : ArmorSetData.getInstance().getSets(item.getId())) { - final int enchantEffect = set.getLowestSetEnchant(player); + final int enchantEffect = set.getLowestSetEnchant(playable); if (enchantEffect > maxSetEnchant) { maxSetEnchant = enchantEffect; diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/ArmorSet.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/ArmorSet.java index b413b5e89a..36fd25aacf 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/ArmorSet.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/ArmorSet.java @@ -22,11 +22,10 @@ import java.util.Set; import java.util.function.Function; import org.l2jmobius.commons.util.CommonUtil; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Inventory; -import org.l2jmobius.gameserver.model.itemcontainer.PlayerInventory; import org.l2jmobius.gameserver.model.stats.BaseStat; /** @@ -162,18 +161,18 @@ public class ArmorSet } /** - * @param player + * @param playable * @return true if all parts of set are enchanted to +6 or more */ - public int getLowestSetEnchant(Player player) + public int getLowestSetEnchant(Playable playable) { - // Player don't have full set - if (getPiecesCountById(player) < _minimumPieces) + // Playable don't have full set + if (getPiecesCountById(playable) < _minimumPieces) { return 0; } - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int enchantLevel = Byte.MAX_VALUE; for (int armorSlot : ARMORSET_SLOTS) { @@ -192,13 +191,13 @@ public class ArmorSet /** * Condition for 3 Lv. Set Effect Applied Skill - * @param player + * @param playable * @param bookSlot * @return total paperdoll(busy) count for 1 of 3 artifact book slots */ - public int getArtifactSlotMask(Player player, int bookSlot) + public int getArtifactSlotMask(Playable playable, int bookSlot) { - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int slotMask = 0; switch (bookSlot) { @@ -242,23 +241,23 @@ public class ArmorSet return slotMask; } - public boolean hasOptionalEquipped(Player player, Function idProvider) + public boolean hasOptionalEquipped(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); } /** - * @param player + * @param playable * @param idProvider - * @return the amount of set visual items that player has equipped + * @return the amount of set visual items that playable has equipped */ - public long getPiecesCount(Player player, Function idProvider) + public long getPiecesCount(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); } - public long getPiecesCountById(Player player) + public long getPiecesCountById(Playable playable) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/VariationInstance.java index d8428a77f7..55f34c8485 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model; import org.l2jmobius.gameserver.data.xml.OptionData; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.options.Options; /** @@ -59,27 +59,27 @@ public class VariationInstance return _option2 == null ? -1 : _option2.getId(); } - public void applyBonus(Player player) + public void applyBonus(Playable playable) { if (_option1 != null) { - _option1.apply(player); + _option1.apply(playable); } if (_option2 != null) { - _option2.apply(player); + _option2.apply(playable); } } - public void removeBonus(Player player) + public void removeBonus(Playable playable) { if (_option1 != null) { - _option1.remove(player); + _option1.remove(playable); } if (_option2 != null) { - _option2.remove(player); + _option2.remove(playable); } } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java index b18ff0fce9..38fd11a4f6 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.holders; import java.util.function.Function; import org.l2jmobius.gameserver.model.ArmorSet; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.item.instance.Item; /** @@ -58,34 +58,34 @@ public class ArmorsetSkillHolder extends SkillHolder return _isOptional; } - public boolean validateConditions(Player player, ArmorSet armorSet, Function idProvider) + public boolean validateConditions(Playable playable, ArmorSet armorSet, Function idProvider) { - // Player's doesn't have full busy (1 of 3) artifact real slot - if (_artifactSlotMask > armorSet.getArtifactSlotMask(player, _artifactBookSlot)) + // Playable doesn't have full busy (1 of 3) artifact real slot + if (_artifactSlotMask > armorSet.getArtifactSlotMask(playable, _artifactBookSlot)) { return false; } - // Player doesn't have enough items equipped to use this skill - if (_minimumPieces > armorSet.getPiecesCount(player, idProvider)) + // Playable doesn't have enough items equipped to use this skill + if (_minimumPieces > armorSet.getPiecesCount(playable, idProvider)) { return false; } - // Player's set enchantment isn't enough to use this skill - if (_minEnchant > armorSet.getLowestSetEnchant(player)) + // Playable set enchantment isn't enough to use this skill + if (_minEnchant > armorSet.getLowestSetEnchant(playable)) { return false; } - // Player doesn't have the required item to use this skill - if (_isOptional && !armorSet.hasOptionalEquipped(player, idProvider)) + // Playable doesn't have the required item to use this skill + if (_isOptional && !armorSet.hasOptionalEquipped(playable, idProvider)) { return false; } - // Player already knows that skill - if (player.getSkillLevel(getSkillId()) == getSkillLevel()) + // Playable already knows that skill + if (playable.getSkillLevel(getSkillId()) == getSkillLevel()) { return false; } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 452bc1e44e..e27a9a9b29 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -51,6 +51,7 @@ import org.l2jmobius.gameserver.model.ArmorSet; import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip; @@ -319,12 +320,12 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final ItemTemplate it = item.getTemplate(); final Map addedSkills = new HashMap<>(1); final Map removedSkills = new HashMap<>(1); @@ -334,11 +335,11 @@ public abstract class Inventory extends ItemContainer // Remove augmentation bonuses on unequip if (item.isAugmented()) { - item.getAugmentation().removeBonus(player); + item.getAugmentation().removeBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Clear enchant bonus item.clearEnchantStats(); @@ -415,7 +416,7 @@ public abstract class Inventory extends ItemContainer for (ItemSkillHolder holder : otherNormalSkills) { - if (player.getSkillLevel(holder.getSkillId()) != 0) + if (playable.getSkillLevel(holder.getSkillId()) != 0) { continue; } @@ -439,13 +440,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -486,7 +487,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -505,7 +506,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -515,12 +516,12 @@ public abstract class Inventory extends ItemContainer } // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. - for (Skill skill : player.getAllSkills()) + for (Skill skill : playable.getAllSkills()) { - if ((skill.isToggle() && player.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, player, player)) // + if ((skill.isToggle() && playable.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, playable, playable)) // || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { - player.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); + playable.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); update = true; } } @@ -528,55 +529,58 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on unequip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); + it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (update) { for (Skill skill : removedSkills.values()) { - player.removeSkill(skill, false, skill.isPassive()); + playable.removeSkill(skill, skill.isPassive()); } for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } if (item.isWeapon()) { - player.unchargeAllShots(); + playable.unchargeAllShots(); } } @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final Map addedSkills = new HashMap<>(1); boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) { - item.getAugmentation().applyBonus(player); + item.getAugmentation().applyBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Apply enchant stats item.applyEnchantStats(); @@ -591,7 +595,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -608,7 +612,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -635,7 +639,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -652,7 +656,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -678,7 +682,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : normalSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -690,7 +694,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -708,13 +712,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -741,7 +745,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -758,7 +762,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -782,7 +786,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -796,7 +800,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -821,22 +825,25 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on equip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); + item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (!addedSkills.isEmpty()) { for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } } @@ -853,16 +860,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean update = false; // Verify and apply normal set - if (verifyAndApply(player, item, Item::getId)) + if (verifyAndApply(playable, item, Item::getId)) { update = true; } @@ -872,26 +879,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(playable, item, Item::getVisualId)) { update = true; } } - if (update) + if (update && playable.isPlayer()) { - player.sendSkillList(); + playable.getActingPlayer().sendSkillList(); } - if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) + if (playable.isPlayer() && ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH))) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } - private static boolean applySkills(Player player, Item item, ArmorSet armorSet, Function idProvider) + private static boolean applySkills(Playable playable, Item item, ArmorSet armorSet, Function idProvider) { - final long piecesCount = armorSet.getPiecesCount(player, idProvider); + final long piecesCount = armorSet.getPiecesCount(playable, idProvider); if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions @@ -899,12 +906,12 @@ public abstract class Inventory extends ItemContainer boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } - if (holder.validateConditions(player, armorSet, idProvider)) + if (holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -913,21 +920,21 @@ public abstract class Inventory extends ItemContainer continue; } - if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } - player.addSkill(itemSkill, false); + playable.addSkill(itemSkill); if (itemSkill.isActive() && (item != null)) { - if (!player.hasSkillReuse(itemSkill.getReuseHashCode())) + if (!playable.hasSkillReuse(itemSkill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(itemSkill, equipDelay); - player.disableSkill(itemSkill, equipDelay); + playable.addTimeStamp(itemSkill, equipDelay); + playable.disableSkill(itemSkill, equipDelay); } } updateTimeStamp = true; @@ -935,22 +942,22 @@ public abstract class Inventory extends ItemContainer update = true; } } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } return update; } return false; } - private static boolean verifyAndApply(Player player, Item item, Function idProvider) + private static boolean verifyAndApply(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); for (ArmorSet armorSet : armorSets) { - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -958,7 +965,7 @@ public abstract class Inventory extends ItemContainer return update; } - private static boolean verifyAndRemove(Player player, Item item, Function idProvider) + private static boolean verifyAndRemove(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); @@ -967,7 +974,7 @@ public abstract class Inventory extends ItemContainer // Remove all skills that doesn't matches the conditions for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (!holder.validateConditions(player, armorSet, idProvider)) + if (!holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -977,7 +984,7 @@ public abstract class Inventory extends ItemContainer } // Update if a skill has been removed. - if (player.removeSkill(itemSkill, false, itemSkill.isPassive()) != null) + if (playable.removeSkill(itemSkill, itemSkill.isPassive()) != null) { update = true; } @@ -985,7 +992,7 @@ public abstract class Inventory extends ItemContainer } // Attempt to apply lower level skills if possible - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -997,16 +1004,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean remove = false; // Verify and remove normal set bonus - if (verifyAndRemove(player, item, Item::getId)) + if (verifyAndRemove(playable, item, Item::getId)) { remove = true; } @@ -1016,21 +1023,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(playable, item, Item::getVisualId)) { remove = true; } } + if (!playable.isPlayer()) + { + return; + } + if (remove) { - player.checkItemRestriction(); - player.sendSkillList(); + playable.getActingPlayer().checkItemRestriction(); + playable.getActingPlayer().sendSkillList(); } if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } } @@ -1198,6 +1210,7 @@ public abstract class Inventory extends ItemContainer { _paperdoll = new Item[PAPERDOLL_TOTALSLOTS]; _paperdollListeners = new ArrayList<>(); + if (this instanceof PlayerInventory) { addPaperdollListener(ArmorSetListener.getInstance()); @@ -1208,6 +1221,11 @@ public abstract class Inventory extends ItemContainer addPaperdollListener(AgathionBraceletListener.getInstance()); addPaperdollListener(ArtifactBookListener.getInstance()); } + else if (this instanceof PetInventory) + { + addPaperdollListener(ArmorSetListener.getInstance()); + addPaperdollListener(ItemSkillsListener.getInstance()); + } // common addPaperdollListener(StatsListener.getInstance()); @@ -2704,12 +2722,12 @@ public abstract class Inventory extends ItemContainer public int getArmorMinEnchant() { - if ((getOwner() == null) || !getOwner().isPlayer()) + if ((getOwner() == null) || !getOwner().isPlayable()) { return 0; } - final Player player = getOwner().getActingPlayer(); + final Playable player = (Playable) getOwner(); return _paperdollCache.getMaxSetEnchant(player); } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/options/Options.java index 0299901a34..f223413b7e 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/options/Options.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; import org.l2jmobius.gameserver.enums.SkillFinishType; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.Skill; @@ -157,11 +157,11 @@ public class Options _activationSkills.add(holder); } - public void apply(Player player) + public void apply(Playable playable) { if (hasEffects()) { - final BuffInfo info = new BuffInfo(player, player, null, true, null, this); + final BuffInfo info = new BuffInfo(playable, playable, null, true, null, this); for (AbstractEffect effect : _effects) { if (effect.isInstant()) @@ -174,7 +174,7 @@ public class Options else { effect.continuousInstant(info.getEffector(), info.getEffected(), info.getSkill(), info.getItem()); - effect.pump(player, info.getSkill()); + effect.pump(playable, info.getSkill()); if (effect.canStart(info.getEffector(), info.getEffected(), info.getSkill())) { info.addEffect(effect); @@ -183,44 +183,47 @@ public class Options } if (!info.getEffects().isEmpty()) { - player.getEffectList().add(info); + playable.getEffectList().add(info); } } if (hasActiveSkills()) { for (Skill skill : _activeSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.addTriggerSkill(holder); + playable.addTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - public void remove(Player player) + public void remove(Playable playable) { if (hasEffects()) { - for (BuffInfo info : player.getEffectList().getOptions()) + for (BuffInfo info : playable.getEffectList().getOptions()) { if (info.getOption() == this) { - player.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); + playable.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); } } } @@ -228,45 +231,48 @@ public class Options { for (Skill skill : _activeSkill) { - player.removeSkill(skill, false, false); + playable.removeSkill(skill, false); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - player.removeSkill(skill, false, true); + playable.removeSkill(skill, true); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.removeTriggerSkill(holder); + playable.removeTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - private void addSkill(Player player, Skill skill) + private void addSkill(Playable playable, Skill skill) { boolean updateTimeStamp = false; - player.addSkill(skill, false); + playable.addSkill(skill); if (skill.isActive()) { - final long remainingTime = player.getSkillRemainingReuseTime(skill.getReuseHashCode()); + final long remainingTime = playable.getSkillRemainingReuseTime(skill.getReuseHashCode()); if (remainingTime > 0) { - player.addTimeStamp(skill, remainingTime); - player.disableSkill(skill, remainingTime); + playable.addTimeStamp(skill, remainingTime); + playable.disableSkill(skill, remainingTime); } updateTimeStamp = true; } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/cache/PaperdollCache.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/cache/PaperdollCache.java index cccadc634c..4b05ef78ab 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/cache/PaperdollCache.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/cache/PaperdollCache.java @@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.data.xml.ArmorSetData; import org.l2jmobius.gameserver.model.ArmorSet; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.stats.BaseStat; @@ -82,7 +83,7 @@ public final class PaperdollCache return value; } - public int getMaxSetEnchant(Player player) + public int getMaxSetEnchant(Playable playable) { if (_maxSetEnchant >= 0) { @@ -94,7 +95,7 @@ public final class PaperdollCache { for (ArmorSet set : ArmorSetData.getInstance().getSets(item.getId())) { - final int enchantEffect = set.getLowestSetEnchant(player); + final int enchantEffect = set.getLowestSetEnchant(playable); if (enchantEffect > maxSetEnchant) { maxSetEnchant = enchantEffect; diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/ArmorSet.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/ArmorSet.java index b413b5e89a..36fd25aacf 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/ArmorSet.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/ArmorSet.java @@ -22,11 +22,10 @@ import java.util.Set; import java.util.function.Function; import org.l2jmobius.commons.util.CommonUtil; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Inventory; -import org.l2jmobius.gameserver.model.itemcontainer.PlayerInventory; import org.l2jmobius.gameserver.model.stats.BaseStat; /** @@ -162,18 +161,18 @@ public class ArmorSet } /** - * @param player + * @param playable * @return true if all parts of set are enchanted to +6 or more */ - public int getLowestSetEnchant(Player player) + public int getLowestSetEnchant(Playable playable) { - // Player don't have full set - if (getPiecesCountById(player) < _minimumPieces) + // Playable don't have full set + if (getPiecesCountById(playable) < _minimumPieces) { return 0; } - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int enchantLevel = Byte.MAX_VALUE; for (int armorSlot : ARMORSET_SLOTS) { @@ -192,13 +191,13 @@ public class ArmorSet /** * Condition for 3 Lv. Set Effect Applied Skill - * @param player + * @param playable * @param bookSlot * @return total paperdoll(busy) count for 1 of 3 artifact book slots */ - public int getArtifactSlotMask(Player player, int bookSlot) + public int getArtifactSlotMask(Playable playable, int bookSlot) { - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int slotMask = 0; switch (bookSlot) { @@ -242,23 +241,23 @@ public class ArmorSet return slotMask; } - public boolean hasOptionalEquipped(Player player, Function idProvider) + public boolean hasOptionalEquipped(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); } /** - * @param player + * @param playable * @param idProvider - * @return the amount of set visual items that player has equipped + * @return the amount of set visual items that playable has equipped */ - public long getPiecesCount(Player player, Function idProvider) + public long getPiecesCount(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); } - public long getPiecesCountById(Player player) + public long getPiecesCountById(Playable playable) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); } } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/VariationInstance.java index d8428a77f7..55f34c8485 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model; import org.l2jmobius.gameserver.data.xml.OptionData; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.options.Options; /** @@ -59,27 +59,27 @@ public class VariationInstance return _option2 == null ? -1 : _option2.getId(); } - public void applyBonus(Player player) + public void applyBonus(Playable playable) { if (_option1 != null) { - _option1.apply(player); + _option1.apply(playable); } if (_option2 != null) { - _option2.apply(player); + _option2.apply(playable); } } - public void removeBonus(Player player) + public void removeBonus(Playable playable) { if (_option1 != null) { - _option1.remove(player); + _option1.remove(playable); } if (_option2 != null) { - _option2.remove(player); + _option2.remove(playable); } } } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java index b18ff0fce9..38fd11a4f6 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.holders; import java.util.function.Function; import org.l2jmobius.gameserver.model.ArmorSet; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.item.instance.Item; /** @@ -58,34 +58,34 @@ public class ArmorsetSkillHolder extends SkillHolder return _isOptional; } - public boolean validateConditions(Player player, ArmorSet armorSet, Function idProvider) + public boolean validateConditions(Playable playable, ArmorSet armorSet, Function idProvider) { - // Player's doesn't have full busy (1 of 3) artifact real slot - if (_artifactSlotMask > armorSet.getArtifactSlotMask(player, _artifactBookSlot)) + // Playable doesn't have full busy (1 of 3) artifact real slot + if (_artifactSlotMask > armorSet.getArtifactSlotMask(playable, _artifactBookSlot)) { return false; } - // Player doesn't have enough items equipped to use this skill - if (_minimumPieces > armorSet.getPiecesCount(player, idProvider)) + // Playable doesn't have enough items equipped to use this skill + if (_minimumPieces > armorSet.getPiecesCount(playable, idProvider)) { return false; } - // Player's set enchantment isn't enough to use this skill - if (_minEnchant > armorSet.getLowestSetEnchant(player)) + // Playable set enchantment isn't enough to use this skill + if (_minEnchant > armorSet.getLowestSetEnchant(playable)) { return false; } - // Player doesn't have the required item to use this skill - if (_isOptional && !armorSet.hasOptionalEquipped(player, idProvider)) + // Playable doesn't have the required item to use this skill + if (_isOptional && !armorSet.hasOptionalEquipped(playable, idProvider)) { return false; } - // Player already knows that skill - if (player.getSkillLevel(getSkillId()) == getSkillLevel()) + // Playable already knows that skill + if (playable.getSkillLevel(getSkillId()) == getSkillLevel()) { return false; } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 452bc1e44e..e27a9a9b29 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -51,6 +51,7 @@ import org.l2jmobius.gameserver.model.ArmorSet; import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip; @@ -319,12 +320,12 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final ItemTemplate it = item.getTemplate(); final Map addedSkills = new HashMap<>(1); final Map removedSkills = new HashMap<>(1); @@ -334,11 +335,11 @@ public abstract class Inventory extends ItemContainer // Remove augmentation bonuses on unequip if (item.isAugmented()) { - item.getAugmentation().removeBonus(player); + item.getAugmentation().removeBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Clear enchant bonus item.clearEnchantStats(); @@ -415,7 +416,7 @@ public abstract class Inventory extends ItemContainer for (ItemSkillHolder holder : otherNormalSkills) { - if (player.getSkillLevel(holder.getSkillId()) != 0) + if (playable.getSkillLevel(holder.getSkillId()) != 0) { continue; } @@ -439,13 +440,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -486,7 +487,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -505,7 +506,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -515,12 +516,12 @@ public abstract class Inventory extends ItemContainer } // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. - for (Skill skill : player.getAllSkills()) + for (Skill skill : playable.getAllSkills()) { - if ((skill.isToggle() && player.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, player, player)) // + if ((skill.isToggle() && playable.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, playable, playable)) // || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { - player.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); + playable.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); update = true; } } @@ -528,55 +529,58 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on unequip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); + it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (update) { for (Skill skill : removedSkills.values()) { - player.removeSkill(skill, false, skill.isPassive()); + playable.removeSkill(skill, skill.isPassive()); } for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } if (item.isWeapon()) { - player.unchargeAllShots(); + playable.unchargeAllShots(); } } @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final Map addedSkills = new HashMap<>(1); boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) { - item.getAugmentation().applyBonus(player); + item.getAugmentation().applyBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Apply enchant stats item.applyEnchantStats(); @@ -591,7 +595,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -608,7 +612,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -635,7 +639,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -652,7 +656,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -678,7 +682,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : normalSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -690,7 +694,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -708,13 +712,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -741,7 +745,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -758,7 +762,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -782,7 +786,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -796,7 +800,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -821,22 +825,25 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on equip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); + item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (!addedSkills.isEmpty()) { for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } } @@ -853,16 +860,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean update = false; // Verify and apply normal set - if (verifyAndApply(player, item, Item::getId)) + if (verifyAndApply(playable, item, Item::getId)) { update = true; } @@ -872,26 +879,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(playable, item, Item::getVisualId)) { update = true; } } - if (update) + if (update && playable.isPlayer()) { - player.sendSkillList(); + playable.getActingPlayer().sendSkillList(); } - if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) + if (playable.isPlayer() && ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH))) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } - private static boolean applySkills(Player player, Item item, ArmorSet armorSet, Function idProvider) + private static boolean applySkills(Playable playable, Item item, ArmorSet armorSet, Function idProvider) { - final long piecesCount = armorSet.getPiecesCount(player, idProvider); + final long piecesCount = armorSet.getPiecesCount(playable, idProvider); if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions @@ -899,12 +906,12 @@ public abstract class Inventory extends ItemContainer boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } - if (holder.validateConditions(player, armorSet, idProvider)) + if (holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -913,21 +920,21 @@ public abstract class Inventory extends ItemContainer continue; } - if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } - player.addSkill(itemSkill, false); + playable.addSkill(itemSkill); if (itemSkill.isActive() && (item != null)) { - if (!player.hasSkillReuse(itemSkill.getReuseHashCode())) + if (!playable.hasSkillReuse(itemSkill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(itemSkill, equipDelay); - player.disableSkill(itemSkill, equipDelay); + playable.addTimeStamp(itemSkill, equipDelay); + playable.disableSkill(itemSkill, equipDelay); } } updateTimeStamp = true; @@ -935,22 +942,22 @@ public abstract class Inventory extends ItemContainer update = true; } } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } return update; } return false; } - private static boolean verifyAndApply(Player player, Item item, Function idProvider) + private static boolean verifyAndApply(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); for (ArmorSet armorSet : armorSets) { - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -958,7 +965,7 @@ public abstract class Inventory extends ItemContainer return update; } - private static boolean verifyAndRemove(Player player, Item item, Function idProvider) + private static boolean verifyAndRemove(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); @@ -967,7 +974,7 @@ public abstract class Inventory extends ItemContainer // Remove all skills that doesn't matches the conditions for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (!holder.validateConditions(player, armorSet, idProvider)) + if (!holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -977,7 +984,7 @@ public abstract class Inventory extends ItemContainer } // Update if a skill has been removed. - if (player.removeSkill(itemSkill, false, itemSkill.isPassive()) != null) + if (playable.removeSkill(itemSkill, itemSkill.isPassive()) != null) { update = true; } @@ -985,7 +992,7 @@ public abstract class Inventory extends ItemContainer } // Attempt to apply lower level skills if possible - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -997,16 +1004,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean remove = false; // Verify and remove normal set bonus - if (verifyAndRemove(player, item, Item::getId)) + if (verifyAndRemove(playable, item, Item::getId)) { remove = true; } @@ -1016,21 +1023,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(playable, item, Item::getVisualId)) { remove = true; } } + if (!playable.isPlayer()) + { + return; + } + if (remove) { - player.checkItemRestriction(); - player.sendSkillList(); + playable.getActingPlayer().checkItemRestriction(); + playable.getActingPlayer().sendSkillList(); } if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } } @@ -1198,6 +1210,7 @@ public abstract class Inventory extends ItemContainer { _paperdoll = new Item[PAPERDOLL_TOTALSLOTS]; _paperdollListeners = new ArrayList<>(); + if (this instanceof PlayerInventory) { addPaperdollListener(ArmorSetListener.getInstance()); @@ -1208,6 +1221,11 @@ public abstract class Inventory extends ItemContainer addPaperdollListener(AgathionBraceletListener.getInstance()); addPaperdollListener(ArtifactBookListener.getInstance()); } + else if (this instanceof PetInventory) + { + addPaperdollListener(ArmorSetListener.getInstance()); + addPaperdollListener(ItemSkillsListener.getInstance()); + } // common addPaperdollListener(StatsListener.getInstance()); @@ -2704,12 +2722,12 @@ public abstract class Inventory extends ItemContainer public int getArmorMinEnchant() { - if ((getOwner() == null) || !getOwner().isPlayer()) + if ((getOwner() == null) || !getOwner().isPlayable()) { return 0; } - final Player player = getOwner().getActingPlayer(); + final Playable player = (Playable) getOwner(); return _paperdollCache.getMaxSetEnchant(player); } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/options/Options.java index 0299901a34..f223413b7e 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/options/Options.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; import org.l2jmobius.gameserver.enums.SkillFinishType; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.Skill; @@ -157,11 +157,11 @@ public class Options _activationSkills.add(holder); } - public void apply(Player player) + public void apply(Playable playable) { if (hasEffects()) { - final BuffInfo info = new BuffInfo(player, player, null, true, null, this); + final BuffInfo info = new BuffInfo(playable, playable, null, true, null, this); for (AbstractEffect effect : _effects) { if (effect.isInstant()) @@ -174,7 +174,7 @@ public class Options else { effect.continuousInstant(info.getEffector(), info.getEffected(), info.getSkill(), info.getItem()); - effect.pump(player, info.getSkill()); + effect.pump(playable, info.getSkill()); if (effect.canStart(info.getEffector(), info.getEffected(), info.getSkill())) { info.addEffect(effect); @@ -183,44 +183,47 @@ public class Options } if (!info.getEffects().isEmpty()) { - player.getEffectList().add(info); + playable.getEffectList().add(info); } } if (hasActiveSkills()) { for (Skill skill : _activeSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.addTriggerSkill(holder); + playable.addTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - public void remove(Player player) + public void remove(Playable playable) { if (hasEffects()) { - for (BuffInfo info : player.getEffectList().getOptions()) + for (BuffInfo info : playable.getEffectList().getOptions()) { if (info.getOption() == this) { - player.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); + playable.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); } } } @@ -228,45 +231,48 @@ public class Options { for (Skill skill : _activeSkill) { - player.removeSkill(skill, false, false); + playable.removeSkill(skill, false); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - player.removeSkill(skill, false, true); + playable.removeSkill(skill, true); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.removeTriggerSkill(holder); + playable.removeTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - private void addSkill(Player player, Skill skill) + private void addSkill(Playable playable, Skill skill) { boolean updateTimeStamp = false; - player.addSkill(skill, false); + playable.addSkill(skill); if (skill.isActive()) { - final long remainingTime = player.getSkillRemainingReuseTime(skill.getReuseHashCode()); + final long remainingTime = playable.getSkillRemainingReuseTime(skill.getReuseHashCode()); if (remainingTime > 0) { - player.addTimeStamp(skill, remainingTime); - player.disableSkill(skill, remainingTime); + playable.addTimeStamp(skill, remainingTime); + playable.disableSkill(skill, remainingTime); } updateTimeStamp = true; } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/cache/PaperdollCache.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/cache/PaperdollCache.java index cccadc634c..4b05ef78ab 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/cache/PaperdollCache.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/cache/PaperdollCache.java @@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.data.xml.ArmorSetData; import org.l2jmobius.gameserver.model.ArmorSet; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.stats.BaseStat; @@ -82,7 +83,7 @@ public final class PaperdollCache return value; } - public int getMaxSetEnchant(Player player) + public int getMaxSetEnchant(Playable playable) { if (_maxSetEnchant >= 0) { @@ -94,7 +95,7 @@ public final class PaperdollCache { for (ArmorSet set : ArmorSetData.getInstance().getSets(item.getId())) { - final int enchantEffect = set.getLowestSetEnchant(player); + final int enchantEffect = set.getLowestSetEnchant(playable); if (enchantEffect > maxSetEnchant) { maxSetEnchant = enchantEffect; diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/ArmorSet.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/ArmorSet.java index b413b5e89a..36fd25aacf 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/ArmorSet.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/ArmorSet.java @@ -22,11 +22,10 @@ import java.util.Set; import java.util.function.Function; import org.l2jmobius.commons.util.CommonUtil; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Inventory; -import org.l2jmobius.gameserver.model.itemcontainer.PlayerInventory; import org.l2jmobius.gameserver.model.stats.BaseStat; /** @@ -162,18 +161,18 @@ public class ArmorSet } /** - * @param player + * @param playable * @return true if all parts of set are enchanted to +6 or more */ - public int getLowestSetEnchant(Player player) + public int getLowestSetEnchant(Playable playable) { - // Player don't have full set - if (getPiecesCountById(player) < _minimumPieces) + // Playable don't have full set + if (getPiecesCountById(playable) < _minimumPieces) { return 0; } - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int enchantLevel = Byte.MAX_VALUE; for (int armorSlot : ARMORSET_SLOTS) { @@ -192,13 +191,13 @@ public class ArmorSet /** * Condition for 3 Lv. Set Effect Applied Skill - * @param player + * @param playable * @param bookSlot * @return total paperdoll(busy) count for 1 of 3 artifact book slots */ - public int getArtifactSlotMask(Player player, int bookSlot) + public int getArtifactSlotMask(Playable playable, int bookSlot) { - final PlayerInventory inv = player.getInventory(); + final Inventory inv = playable.getInventory(); int slotMask = 0; switch (bookSlot) { @@ -242,23 +241,23 @@ public class ArmorSet return slotMask; } - public boolean hasOptionalEquipped(Player player, Function idProvider) + public boolean hasOptionalEquipped(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItems().stream().anyMatch(item -> CommonUtil.contains(_optionalItems, idProvider.apply(item))); } /** - * @param player + * @param playable * @param idProvider - * @return the amount of set visual items that player has equipped + * @return the amount of set visual items that playable has equipped */ - public long getPiecesCount(Player player, Function idProvider) + public long getPiecesCount(Playable playable, Function idProvider) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, idProvider.apply(item))); } - public long getPiecesCountById(Player player) + public long getPiecesCountById(Playable playable) { - return player.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); + return playable.getInventory().getPaperdollItemCount(item -> CommonUtil.contains(_requiredItems, item.getId())); } } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/VariationInstance.java index d8428a77f7..55f34c8485 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model; import org.l2jmobius.gameserver.data.xml.OptionData; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.options.Options; /** @@ -59,27 +59,27 @@ public class VariationInstance return _option2 == null ? -1 : _option2.getId(); } - public void applyBonus(Player player) + public void applyBonus(Playable playable) { if (_option1 != null) { - _option1.apply(player); + _option1.apply(playable); } if (_option2 != null) { - _option2.apply(player); + _option2.apply(playable); } } - public void removeBonus(Player player) + public void removeBonus(Playable playable) { if (_option1 != null) { - _option1.remove(player); + _option1.remove(playable); } if (_option2 != null) { - _option2.remove(player); + _option2.remove(playable); } } } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java index b18ff0fce9..38fd11a4f6 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.holders; import java.util.function.Function; import org.l2jmobius.gameserver.model.ArmorSet; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.item.instance.Item; /** @@ -58,34 +58,34 @@ public class ArmorsetSkillHolder extends SkillHolder return _isOptional; } - public boolean validateConditions(Player player, ArmorSet armorSet, Function idProvider) + public boolean validateConditions(Playable playable, ArmorSet armorSet, Function idProvider) { - // Player's doesn't have full busy (1 of 3) artifact real slot - if (_artifactSlotMask > armorSet.getArtifactSlotMask(player, _artifactBookSlot)) + // Playable doesn't have full busy (1 of 3) artifact real slot + if (_artifactSlotMask > armorSet.getArtifactSlotMask(playable, _artifactBookSlot)) { return false; } - // Player doesn't have enough items equipped to use this skill - if (_minimumPieces > armorSet.getPiecesCount(player, idProvider)) + // Playable doesn't have enough items equipped to use this skill + if (_minimumPieces > armorSet.getPiecesCount(playable, idProvider)) { return false; } - // Player's set enchantment isn't enough to use this skill - if (_minEnchant > armorSet.getLowestSetEnchant(player)) + // Playable set enchantment isn't enough to use this skill + if (_minEnchant > armorSet.getLowestSetEnchant(playable)) { return false; } - // Player doesn't have the required item to use this skill - if (_isOptional && !armorSet.hasOptionalEquipped(player, idProvider)) + // Playable doesn't have the required item to use this skill + if (_isOptional && !armorSet.hasOptionalEquipped(playable, idProvider)) { return false; } - // Player already knows that skill - if (player.getSkillLevel(getSkillId()) == getSkillLevel()) + // Playable already knows that skill + if (playable.getSkillLevel(getSkillId()) == getSkillLevel()) { return false; } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 452bc1e44e..e27a9a9b29 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -51,6 +51,7 @@ import org.l2jmobius.gameserver.model.ArmorSet; import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip; @@ -319,12 +320,12 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final ItemTemplate it = item.getTemplate(); final Map addedSkills = new HashMap<>(1); final Map removedSkills = new HashMap<>(1); @@ -334,11 +335,11 @@ public abstract class Inventory extends ItemContainer // Remove augmentation bonuses on unequip if (item.isAugmented()) { - item.getAugmentation().removeBonus(player); + item.getAugmentation().removeBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Clear enchant bonus item.clearEnchantStats(); @@ -415,7 +416,7 @@ public abstract class Inventory extends ItemContainer for (ItemSkillHolder holder : otherNormalSkills) { - if (player.getSkillLevel(holder.getSkillId()) != 0) + if (playable.getSkillLevel(holder.getSkillId()) != 0) { continue; } @@ -439,13 +440,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -486,7 +487,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -505,7 +506,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { removedSkills.putIfAbsent(skill.getId(), skill); update = true; @@ -515,12 +516,12 @@ public abstract class Inventory extends ItemContainer } // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. - for (Skill skill : player.getAllSkills()) + for (Skill skill : playable.getAllSkills()) { - if ((skill.isToggle() && player.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, player, player)) // + if ((skill.isToggle() && playable.isAffectedBySkill(skill.getId()) && !skill.checkConditions(SkillConditionScope.GENERAL, playable, playable)) // || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { - player.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); + playable.stopSkillEffects(SkillFinishType.REMOVED, skill.getId()); update = true; } } @@ -528,55 +529,58 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on unequip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); + it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (update) { for (Skill skill : removedSkills.values()) { - player.removeSkill(skill, false, skill.isPassive()); + playable.removeSkill(skill, skill.isPassive()); } for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } if (item.isWeapon()) { - player.unchargeAllShots(); + playable.unchargeAllShots(); } } @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); final Map addedSkills = new HashMap<>(1); boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) { - item.getAugmentation().applyBonus(player); + item.getAugmentation().applyBonus(playable); } // Recalculate all stats - player.getStat().recalculateStats(true); + playable.getStat().recalculateStats(true); // Apply enchant stats item.applyEnchantStats(); @@ -591,7 +595,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -608,7 +612,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -635,7 +639,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : onBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -652,7 +656,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -678,7 +682,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : normalSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -690,7 +694,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -708,13 +712,13 @@ public abstract class Inventory extends ItemContainer addedSkills.put(skill.getId(), skill); } - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isActive() && !playable.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + playable.addTimeStamp(skill, equipDelay); + playable.disableSkill(skill, equipDelay); } updateTimestamp = true; } @@ -741,7 +745,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherEnchantSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -758,7 +762,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -782,7 +786,7 @@ public abstract class Inventory extends ItemContainer { for (ItemSkillHolder holder : otherBlessingSkills) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } @@ -796,7 +800,7 @@ public abstract class Inventory extends ItemContainer } // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } @@ -821,22 +825,25 @@ public abstract class Inventory extends ItemContainer // Apply skill, if item has "skills on equip" and it is not a secondary agathion. if ((slot < PAPERDOLL_AGATHION2) || (slot > PAPERDOLL_AGATHION5)) { - item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); + item.getTemplate().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(playable, playable)); } if (!addedSkills.isEmpty()) { for (Skill skill : addedSkills.values()) { - player.addSkill(skill, false); + playable.addSkill(skill); } - player.sendSkillList(); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - if (updateTimestamp) + if (updateTimestamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } } @@ -853,16 +860,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyEquiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean update = false; // Verify and apply normal set - if (verifyAndApply(player, item, Item::getId)) + if (verifyAndApply(playable, item, Item::getId)) { update = true; } @@ -872,26 +879,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(playable, item, Item::getVisualId)) { update = true; } } - if (update) + if (update && playable.isPlayer()) { - player.sendSkillList(); + playable.getActingPlayer().sendSkillList(); } - if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) + if (playable.isPlayer() && ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH))) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } - private static boolean applySkills(Player player, Item item, ArmorSet armorSet, Function idProvider) + private static boolean applySkills(Playable playable, Item item, ArmorSet armorSet, Function idProvider) { - final long piecesCount = armorSet.getPiecesCount(player, idProvider); + final long piecesCount = armorSet.getPiecesCount(playable, idProvider); if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions @@ -899,12 +906,12 @@ public abstract class Inventory extends ItemContainer boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (player.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) + if (playable.getSkillLevel(holder.getSkillId()) >= holder.getSkillLevel()) { continue; } - if (holder.validateConditions(player, armorSet, idProvider)) + if (holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -913,21 +920,21 @@ public abstract class Inventory extends ItemContainer continue; } - if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + if (itemSkill.isPassive() && !itemSkill.checkConditions(SkillConditionScope.PASSIVE, playable, playable)) { continue; } - player.addSkill(itemSkill, false); + playable.addSkill(itemSkill); if (itemSkill.isActive() && (item != null)) { - if (!player.hasSkillReuse(itemSkill.getReuseHashCode())) + if (!playable.hasSkillReuse(itemSkill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) { - player.addTimeStamp(itemSkill, equipDelay); - player.disableSkill(itemSkill, equipDelay); + playable.addTimeStamp(itemSkill, equipDelay); + playable.disableSkill(itemSkill, equipDelay); } } updateTimeStamp = true; @@ -935,22 +942,22 @@ public abstract class Inventory extends ItemContainer update = true; } } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } return update; } return false; } - private static boolean verifyAndApply(Player player, Item item, Function idProvider) + private static boolean verifyAndApply(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); for (ArmorSet armorSet : armorSets) { - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -958,7 +965,7 @@ public abstract class Inventory extends ItemContainer return update; } - private static boolean verifyAndRemove(Player player, Item item, Function idProvider) + private static boolean verifyAndRemove(Playable playable, Item item, Function idProvider) { boolean update = false; final List armorSets = ArmorSetData.getInstance().getSets(idProvider.apply(item)); @@ -967,7 +974,7 @@ public abstract class Inventory extends ItemContainer // Remove all skills that doesn't matches the conditions for (ArmorsetSkillHolder holder : armorSet.getSkills()) { - if (!holder.validateConditions(player, armorSet, idProvider)) + if (!holder.validateConditions(playable, armorSet, idProvider)) { final Skill itemSkill = holder.getSkill(); if (itemSkill == null) @@ -977,7 +984,7 @@ public abstract class Inventory extends ItemContainer } // Update if a skill has been removed. - if (player.removeSkill(itemSkill, false, itemSkill.isPassive()) != null) + if (playable.removeSkill(itemSkill, itemSkill.isPassive()) != null) { update = true; } @@ -985,7 +992,7 @@ public abstract class Inventory extends ItemContainer } // Attempt to apply lower level skills if possible - if (applySkills(player, item, armorSet, idProvider)) + if (applySkills(playable, item, armorSet, idProvider)) { update = true; } @@ -997,16 +1004,16 @@ public abstract class Inventory extends ItemContainer @Override public void notifyUnequiped(int slot, Item item, Inventory inventory) { - if (!inventory.getOwner().isPlayer()) + if (!inventory.getOwner().isPlayable()) { return; } - final Player player = (Player) inventory.getOwner(); + final Playable playable = (Playable) inventory.getOwner(); boolean remove = false; // Verify and remove normal set bonus - if (verifyAndRemove(player, item, Item::getId)) + if (verifyAndRemove(playable, item, Item::getId)) { remove = true; } @@ -1016,21 +1023,26 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(player, item, Item::getVisualId)) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndRemove(playable, item, Item::getVisualId)) { remove = true; } } + if (!playable.isPlayer()) + { + return; + } + if (remove) { - player.checkItemRestriction(); - player.sendSkillList(); + playable.getActingPlayer().checkItemRestriction(); + playable.getActingPlayer().sendSkillList(); } if ((item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH_JEWEL) || (item.getTemplate().getBodyPart() == ItemTemplate.SLOT_BROOCH)) { - player.updateActiveBroochJewel(); + playable.getActingPlayer().updateActiveBroochJewel(); } } } @@ -1198,6 +1210,7 @@ public abstract class Inventory extends ItemContainer { _paperdoll = new Item[PAPERDOLL_TOTALSLOTS]; _paperdollListeners = new ArrayList<>(); + if (this instanceof PlayerInventory) { addPaperdollListener(ArmorSetListener.getInstance()); @@ -1208,6 +1221,11 @@ public abstract class Inventory extends ItemContainer addPaperdollListener(AgathionBraceletListener.getInstance()); addPaperdollListener(ArtifactBookListener.getInstance()); } + else if (this instanceof PetInventory) + { + addPaperdollListener(ArmorSetListener.getInstance()); + addPaperdollListener(ItemSkillsListener.getInstance()); + } // common addPaperdollListener(StatsListener.getInstance()); @@ -2704,12 +2722,12 @@ public abstract class Inventory extends ItemContainer public int getArmorMinEnchant() { - if ((getOwner() == null) || !getOwner().isPlayer()) + if ((getOwner() == null) || !getOwner().isPlayable()) { return 0; } - final Player player = getOwner().getActingPlayer(); + final Playable player = (Playable) getOwner(); return _paperdollCache.getMaxSetEnchant(player); } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/options/Options.java index 0299901a34..f223413b7e 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/options/Options.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; import org.l2jmobius.gameserver.enums.SkillFinishType; -import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.Skill; @@ -157,11 +157,11 @@ public class Options _activationSkills.add(holder); } - public void apply(Player player) + public void apply(Playable playable) { if (hasEffects()) { - final BuffInfo info = new BuffInfo(player, player, null, true, null, this); + final BuffInfo info = new BuffInfo(playable, playable, null, true, null, this); for (AbstractEffect effect : _effects) { if (effect.isInstant()) @@ -174,7 +174,7 @@ public class Options else { effect.continuousInstant(info.getEffector(), info.getEffected(), info.getSkill(), info.getItem()); - effect.pump(player, info.getSkill()); + effect.pump(playable, info.getSkill()); if (effect.canStart(info.getEffector(), info.getEffected(), info.getSkill())) { info.addEffect(effect); @@ -183,44 +183,47 @@ public class Options } if (!info.getEffects().isEmpty()) { - player.getEffectList().add(info); + playable.getEffectList().add(info); } } if (hasActiveSkills()) { for (Skill skill : _activeSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - addSkill(player, skill); + addSkill(playable, skill); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.addTriggerSkill(holder); + playable.addTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - public void remove(Player player) + public void remove(Playable playable) { if (hasEffects()) { - for (BuffInfo info : player.getEffectList().getOptions()) + for (BuffInfo info : playable.getEffectList().getOptions()) { if (info.getOption() == this) { - player.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); + playable.getEffectList().remove(info, SkillFinishType.NORMAL, true, true); } } } @@ -228,45 +231,48 @@ public class Options { for (Skill skill : _activeSkill) { - player.removeSkill(skill, false, false); + playable.removeSkill(skill, false); } } if (hasPassiveSkills()) { for (Skill skill : _passiveSkill) { - player.removeSkill(skill, false, true); + playable.removeSkill(skill, true); } } if (hasActivationSkills()) { for (OptionSkillHolder holder : _activationSkills) { - player.removeTriggerSkill(holder); + playable.removeTriggerSkill(holder); } } - player.getStat().recalculateStats(true); - player.sendSkillList(); + playable.getStat().recalculateStats(true); + if (playable.isPlayer()) + { + playable.getActingPlayer().sendSkillList(); + } } - private void addSkill(Player player, Skill skill) + private void addSkill(Playable playable, Skill skill) { boolean updateTimeStamp = false; - player.addSkill(skill, false); + playable.addSkill(skill); if (skill.isActive()) { - final long remainingTime = player.getSkillRemainingReuseTime(skill.getReuseHashCode()); + final long remainingTime = playable.getSkillRemainingReuseTime(skill.getReuseHashCode()); if (remainingTime > 0) { - player.addTimeStamp(skill, remainingTime); - player.disableSkill(skill, remainingTime); + playable.addTimeStamp(skill, remainingTime); + playable.disableSkill(skill, remainingTime); } updateTimeStamp = true; } - if (updateTimeStamp) + if (updateTimeStamp && playable.isPlayer()) { - player.sendPacket(new SkillCoolTime(player)); + playable.sendPacket(new SkillCoolTime(playable.getActingPlayer())); } } }