Removal of AtomicInteger variables from Inventory class.
This commit is contained in:
@@ -27,7 +27,6 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.logging.Level;
|
||||
@@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
|
||||
import org.l2jmobius.gameserver.model.items.EtcItem;
|
||||
import org.l2jmobius.gameserver.model.items.Item;
|
||||
import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone;
|
||||
@@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
final PlayerInstance player = (PlayerInstance) inventory.getOwner();
|
||||
final Item it = item.getItem();
|
||||
final AtomicBoolean update = new AtomicBoolean();
|
||||
final AtomicBoolean updateTimestamp = new AtomicBoolean();
|
||||
boolean update = false;
|
||||
boolean updateTimestamp = false;
|
||||
|
||||
// Remove augmentation bonuses on unequip
|
||||
if (item.isAugmented())
|
||||
@@ -308,15 +308,19 @@ public abstract class Inventory extends ItemContainer
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(true);
|
||||
|
||||
it.forEachSkill(ItemSkillType.ON_ENCHANT, holder ->
|
||||
final List<ItemSkillHolder> onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT);
|
||||
if (onEnchantSkills != null)
|
||||
{
|
||||
// Remove skills bestowed from +4 armor
|
||||
if (item.getEnchantLevel() >= holder.getValue())
|
||||
for (ItemSkillHolder holder : onEnchantSkills)
|
||||
{
|
||||
player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive());
|
||||
update.compareAndSet(false, true);
|
||||
// Remove skills bestowed from +4 armor
|
||||
if (item.getEnchantLevel() >= holder.getValue())
|
||||
{
|
||||
player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive());
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Clear enchant bonus
|
||||
item.clearEnchantStats();
|
||||
@@ -324,31 +328,40 @@ public abstract class Inventory extends ItemContainer
|
||||
// Clear SA Bonus
|
||||
item.clearSpecialAbilities();
|
||||
|
||||
it.forEachSkill(ItemSkillType.NORMAL, holder ->
|
||||
final List<ItemSkillHolder> normalSkills = it.getSkills(ItemSkillType.NORMAL);
|
||||
if (normalSkills != null)
|
||||
{
|
||||
final Skill Skill = holder.getSkill();
|
||||
|
||||
if (Skill != null)
|
||||
for (ItemSkillHolder holder : normalSkills)
|
||||
{
|
||||
player.removeSkill(Skill, false, Skill.isPassive());
|
||||
update.compareAndSet(false, true);
|
||||
final Skill skill = holder.getSkill();
|
||||
if (skill != null)
|
||||
{
|
||||
player.removeSkill(skill, false, skill.isPassive());
|
||||
update = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (item.isArmor())
|
||||
{
|
||||
for (ItemInstance itm : inventory.getItems())
|
||||
{
|
||||
if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item))
|
||||
if (!itm.isEquipped() || itm.equals(item))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder ->
|
||||
final List<ItemSkillHolder> otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL);
|
||||
if (otherNormalSkills == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (ItemSkillHolder holder : otherNormalSkills)
|
||||
{
|
||||
if (player.getSkillLevel(holder.getSkillId()) != 0)
|
||||
{
|
||||
@@ -359,30 +372,32 @@ public abstract class Inventory extends ItemContainer
|
||||
if (skill != null)
|
||||
{
|
||||
player.addSkill(skill, false);
|
||||
|
||||
if (skill.isActive())
|
||||
if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode()))
|
||||
{
|
||||
if (!player.hasSkillReuse(skill.getReuseHashCode()))
|
||||
final int equipDelay = item.getEquipReuseDelay();
|
||||
if (equipDelay > 0)
|
||||
{
|
||||
final int equipDelay = item.getEquipReuseDelay();
|
||||
if (equipDelay > 0)
|
||||
{
|
||||
player.addTimeStamp(skill, equipDelay);
|
||||
player.disableSkill(skill, equipDelay);
|
||||
}
|
||||
updateTimestamp.compareAndSet(false, true);
|
||||
player.addTimeStamp(skill, equipDelay);
|
||||
player.disableSkill(skill, equipDelay);
|
||||
}
|
||||
updateTimestamp = true;
|
||||
}
|
||||
update.compareAndSet(false, true);
|
||||
update = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Must check all equipped items for enchant conditions.
|
||||
for (ItemInstance equipped : inventory.getPaperdollItems())
|
||||
{
|
||||
equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder ->
|
||||
final List<ItemSkillHolder> otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT);
|
||||
if (otherEnchantSkills == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (ItemSkillHolder holder : otherEnchantSkills)
|
||||
{
|
||||
// Add skills bestowed from +4 armor
|
||||
if (equipped.getEnchantLevel() >= holder.getValue())
|
||||
@@ -392,11 +407,12 @@ public abstract class Inventory extends ItemContainer
|
||||
if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player))
|
||||
{
|
||||
player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive());
|
||||
update.compareAndSet(false, true);
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Must check for toggle and isRemovedOnUnequipWeapon skill item conditions.
|
||||
for (Skill skill : player.getAllSkills())
|
||||
{
|
||||
@@ -404,18 +420,18 @@ public abstract class Inventory extends ItemContainer
|
||||
|| (it.isWeapon() && skill.isRemovedOnUnequipWeapon()))
|
||||
{
|
||||
player.stopSkillEffects(true, skill.getId());
|
||||
update.compareAndSet(false, true);
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Apply skill, if weapon have "skills on unequip"
|
||||
it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player));
|
||||
|
||||
if (update.get())
|
||||
if (update)
|
||||
{
|
||||
player.sendSkillList();
|
||||
}
|
||||
if (updateTimestamp.get())
|
||||
if (updateTimestamp)
|
||||
{
|
||||
player.sendPacket(new SkillCoolTime(player));
|
||||
}
|
||||
@@ -442,8 +458,8 @@ public abstract class Inventory extends ItemContainer
|
||||
return;
|
||||
}
|
||||
|
||||
final AtomicBoolean update = new AtomicBoolean();
|
||||
final AtomicBoolean updateTimestamp = new AtomicBoolean();
|
||||
boolean update = false;
|
||||
boolean updateTimestamp = false;
|
||||
|
||||
// Apply augmentation bonuses on equip
|
||||
if (item.isAugmented())
|
||||
@@ -454,21 +470,25 @@ public abstract class Inventory extends ItemContainer
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(true);
|
||||
|
||||
item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder ->
|
||||
final List<ItemSkillHolder> onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT);
|
||||
if (onEnchantSkills != null)
|
||||
{
|
||||
// Add skills bestowed from +4 armor
|
||||
if (item.getEnchantLevel() >= holder.getValue())
|
||||
for (ItemSkillHolder holder : onEnchantSkills)
|
||||
{
|
||||
final Skill skill = holder.getSkill();
|
||||
// Check passive skill conditions.
|
||||
if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player))
|
||||
// Add skills bestowed from +4 armor
|
||||
if (item.getEnchantLevel() >= holder.getValue())
|
||||
{
|
||||
return;
|
||||
final Skill skill = holder.getSkill();
|
||||
// Check passive skill conditions.
|
||||
if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
player.addSkill(skill, false);
|
||||
update = true;
|
||||
}
|
||||
player.addSkill(skill, false);
|
||||
update.compareAndSet(false, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Apply enchant stats
|
||||
item.applyEnchantStats();
|
||||
@@ -476,21 +496,21 @@ public abstract class Inventory extends ItemContainer
|
||||
// Apply SA skill
|
||||
item.applySpecialAbilities();
|
||||
|
||||
item.getItem().forEachSkill(ItemSkillType.NORMAL, holder ->
|
||||
final List<ItemSkillHolder> normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL);
|
||||
if (normalSkills != null)
|
||||
{
|
||||
final Skill skill = holder.getSkill();
|
||||
if (skill != null)
|
||||
for (ItemSkillHolder holder : normalSkills)
|
||||
{
|
||||
if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player))
|
||||
final Skill skill = holder.getSkill();
|
||||
if (skill != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.addSkill(skill, false);
|
||||
|
||||
if (skill.isActive())
|
||||
{
|
||||
if (!player.hasSkillReuse(skill.getReuseHashCode()))
|
||||
if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.addSkill(skill, false);
|
||||
if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode()))
|
||||
{
|
||||
final int equipDelay = item.getEquipReuseDelay();
|
||||
if (equipDelay > 0)
|
||||
@@ -498,21 +518,27 @@ public abstract class Inventory extends ItemContainer
|
||||
player.addTimeStamp(skill, equipDelay);
|
||||
player.disableSkill(skill, equipDelay);
|
||||
}
|
||||
updateTimestamp.compareAndSet(false, true);
|
||||
updateTimestamp = true;
|
||||
}
|
||||
update = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder);
|
||||
}
|
||||
update.compareAndSet(false, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Must check all equipped items for enchant conditions.
|
||||
for (ItemInstance equipped : inventory.getPaperdollItems())
|
||||
{
|
||||
equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder ->
|
||||
final List<ItemSkillHolder> otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT);
|
||||
if (otherEnchantSkills == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (ItemSkillHolder holder : otherEnchantSkills)
|
||||
{
|
||||
// Add skills bestowed from +4 armor
|
||||
if (equipped.getEnchantLevel() >= holder.getValue())
|
||||
@@ -524,19 +550,19 @@ public abstract class Inventory extends ItemContainer
|
||||
return;
|
||||
}
|
||||
player.addSkill(skill, false);
|
||||
update.compareAndSet(false, true);
|
||||
update = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Apply skill, if weapon have "skills on equip"
|
||||
item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player));
|
||||
|
||||
if (update.get())
|
||||
if (update)
|
||||
{
|
||||
player.sendSkillList();
|
||||
}
|
||||
if (updateTimestamp.get())
|
||||
if (updateTimestamp)
|
||||
{
|
||||
player.sendPacket(new SkillCoolTime(player));
|
||||
}
|
||||
@@ -574,12 +600,9 @@ public abstract class Inventory extends ItemContainer
|
||||
if (itemVisualId > 0)
|
||||
{
|
||||
final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId);
|
||||
if (stone != null)
|
||||
if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId))
|
||||
{
|
||||
if ((stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId))
|
||||
{
|
||||
update = true;
|
||||
}
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -600,8 +623,8 @@ public abstract class Inventory extends ItemContainer
|
||||
if (piecesCount >= armorSet.getMinimumPieces())
|
||||
{
|
||||
// Applying all skills that matching the conditions
|
||||
final AtomicBoolean updateTimeStamp = new AtomicBoolean();
|
||||
final AtomicBoolean update = new AtomicBoolean();
|
||||
boolean updateTimeStamp = false;
|
||||
boolean update = false;
|
||||
for (ArmorsetSkillHolder holder : armorSet.getSkills())
|
||||
{
|
||||
if (holder.validateConditions(player, armorSet, idProvider))
|
||||
@@ -630,16 +653,16 @@ public abstract class Inventory extends ItemContainer
|
||||
player.disableSkill(itemSkill, equipDelay);
|
||||
}
|
||||
}
|
||||
updateTimeStamp.compareAndSet(false, true);
|
||||
updateTimeStamp = true;
|
||||
}
|
||||
update.compareAndSet(false, true);
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
if (updateTimeStamp.get())
|
||||
if (updateTimeStamp)
|
||||
{
|
||||
player.sendPacket(new SkillCoolTime(player));
|
||||
}
|
||||
return update.get();
|
||||
return update;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user