Removed several synchronized locks.
This commit is contained in:
-3
@@ -413,14 +413,11 @@ public final class FeedableBeasts extends AbstractNpcAI
|
|||||||
// if this is finally a trained mob, then despawn any other trained mobs that the
|
// if this is finally a trained mob, then despawn any other trained mobs that the
|
||||||
// player might have and initialize the Tamed Beast.
|
// player might have and initialize the Tamed Beast.
|
||||||
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
||||||
{
|
|
||||||
if ((player.getTrainedBeasts() != null) && !player.getTrainedBeasts().isEmpty())
|
|
||||||
{
|
{
|
||||||
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
||||||
{
|
{
|
||||||
oldTrained.deleteMe();
|
oldTrained.deleteMe();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
||||||
nextNpc.setRunning();
|
nextNpc.setRunning();
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -114,6 +113,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -596,12 +596,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -673,7 +673,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -690,7 +690,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -713,7 +713,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2025,11 +2025,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4305,9 +4301,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -5026,13 +5029,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5454,7 +5457,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5505,16 +5508,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5532,16 +5525,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10432,14 +10415,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10539,14 +10519,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10936,16 +10913,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11750,38 +11717,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11791,8 +11747,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11804,8 +11759,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11838,7 +11792,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13250,7 +13204,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13293,7 +13247,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13312,7 +13266,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13331,7 +13285,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13699,22 +13653,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13723,7 +13667,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13733,7 +13677,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13741,12 +13685,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13757,7 +13701,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13777,7 +13721,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13786,7 +13730,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13818,16 +13762,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13918,16 +13852,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13937,7 +13861,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13951,11 +13875,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13964,11 +13887,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13978,11 +13900,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -413,14 +413,11 @@ public final class FeedableBeasts extends AbstractNpcAI
|
|||||||
// if this is finally a trained mob, then despawn any other trained mobs that the
|
// if this is finally a trained mob, then despawn any other trained mobs that the
|
||||||
// player might have and initialize the Tamed Beast.
|
// player might have and initialize the Tamed Beast.
|
||||||
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
||||||
{
|
|
||||||
if ((player.getTrainedBeasts() != null) && !player.getTrainedBeasts().isEmpty())
|
|
||||||
{
|
{
|
||||||
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
||||||
{
|
{
|
||||||
oldTrained.deleteMe();
|
oldTrained.deleteMe();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
||||||
nextNpc.setRunning();
|
nextNpc.setRunning();
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -115,6 +114,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -598,12 +598,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -675,7 +675,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -692,7 +692,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -715,7 +715,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2031,11 +2031,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4311,9 +4307,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -5032,13 +5035,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5460,7 +5463,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5511,16 +5514,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5538,16 +5531,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10439,14 +10422,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10546,14 +10526,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10943,16 +10920,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11757,38 +11724,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11798,8 +11754,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11811,8 +11766,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11845,7 +11799,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13257,7 +13211,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13300,7 +13254,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13319,7 +13273,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13338,7 +13292,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13706,22 +13660,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13730,7 +13674,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13740,7 +13684,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13748,12 +13692,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13764,7 +13708,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13784,7 +13728,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13793,7 +13737,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13825,16 +13769,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13925,16 +13859,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13944,7 +13868,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13958,11 +13882,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13971,11 +13894,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13985,11 +13907,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -413,14 +413,11 @@ public final class FeedableBeasts extends AbstractNpcAI
|
|||||||
// if this is finally a trained mob, then despawn any other trained mobs that the
|
// if this is finally a trained mob, then despawn any other trained mobs that the
|
||||||
// player might have and initialize the Tamed Beast.
|
// player might have and initialize the Tamed Beast.
|
||||||
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
||||||
{
|
|
||||||
if ((player.getTrainedBeasts() != null) && !player.getTrainedBeasts().isEmpty())
|
|
||||||
{
|
{
|
||||||
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
||||||
{
|
{
|
||||||
oldTrained.deleteMe();
|
oldTrained.deleteMe();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
||||||
nextNpc.setRunning();
|
nextNpc.setRunning();
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -116,6 +115,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -600,12 +600,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -677,7 +677,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -694,7 +694,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -717,7 +717,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2033,11 +2033,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4313,9 +4309,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -5034,13 +5037,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5462,7 +5465,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5513,16 +5516,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5540,16 +5533,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10441,14 +10424,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10548,14 +10528,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10945,16 +10922,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11759,38 +11726,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11800,8 +11756,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11813,8 +11768,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11847,7 +11801,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13260,7 +13214,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13303,7 +13257,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13322,7 +13276,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13341,7 +13295,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13709,22 +13663,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13733,7 +13677,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13743,7 +13687,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13751,12 +13695,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13767,7 +13711,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13787,7 +13731,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13796,7 +13740,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13828,16 +13772,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13928,16 +13862,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13947,7 +13871,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13961,11 +13885,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13974,11 +13897,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13988,11 +13910,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -413,14 +413,11 @@ public final class FeedableBeasts extends AbstractNpcAI
|
|||||||
// if this is finally a trained mob, then despawn any other trained mobs that the
|
// if this is finally a trained mob, then despawn any other trained mobs that the
|
||||||
// player might have and initialize the Tamed Beast.
|
// player might have and initialize the Tamed Beast.
|
||||||
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
||||||
{
|
|
||||||
if ((player.getTrainedBeasts() != null) && !player.getTrainedBeasts().isEmpty())
|
|
||||||
{
|
{
|
||||||
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
||||||
{
|
{
|
||||||
oldTrained.deleteMe();
|
oldTrained.deleteMe();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
||||||
nextNpc.setRunning();
|
nextNpc.setRunning();
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+33
-109
@@ -605,12 +605,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
// client radar
|
// client radar
|
||||||
// TODO: This needs to be better integrated and saved/loaded
|
// TODO: This needs to be better integrated and saved/loaded
|
||||||
@@ -677,10 +677,10 @@ public final class PlayerInstance extends Playable
|
|||||||
private long _spawnProtectEndTime = 0;
|
private long _spawnProtectEndTime = 0;
|
||||||
private long _teleportProtectEndTime = 0;
|
private long _teleportProtectEndTime = 0;
|
||||||
|
|
||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -701,7 +701,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -724,7 +724,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -5032,13 +5032,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5460,7 +5460,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5511,16 +5511,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5538,16 +5528,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10435,14 +10415,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10542,14 +10519,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -11743,38 +11717,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11784,8 +11747,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11797,8 +11759,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11831,7 +11792,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13243,7 +13204,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13286,7 +13247,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13305,7 +13266,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13324,7 +13285,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13684,22 +13645,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13708,7 +13659,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13718,7 +13669,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13726,12 +13677,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13742,7 +13693,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13762,7 +13713,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13771,7 +13722,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13803,16 +13754,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13903,16 +13844,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13922,7 +13853,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13936,11 +13867,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13949,11 +13879,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13963,11 +13892,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -413,14 +413,11 @@ public final class FeedableBeasts extends AbstractNpcAI
|
|||||||
// if this is finally a trained mob, then despawn any other trained mobs that the
|
// if this is finally a trained mob, then despawn any other trained mobs that the
|
||||||
// player might have and initialize the Tamed Beast.
|
// player might have and initialize the Tamed Beast.
|
||||||
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
||||||
{
|
|
||||||
if ((player.getTrainedBeasts() != null) && !player.getTrainedBeasts().isEmpty())
|
|
||||||
{
|
{
|
||||||
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
||||||
{
|
{
|
||||||
oldTrained.deleteMe();
|
oldTrained.deleteMe();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
||||||
nextNpc.setRunning();
|
nextNpc.setRunning();
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+33
-109
@@ -603,12 +603,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
// client radar
|
// client radar
|
||||||
// TODO: This needs to be better integrated and saved/loaded
|
// TODO: This needs to be better integrated and saved/loaded
|
||||||
@@ -675,10 +675,10 @@ public final class PlayerInstance extends Playable
|
|||||||
private long _spawnProtectEndTime = 0;
|
private long _spawnProtectEndTime = 0;
|
||||||
private long _teleportProtectEndTime = 0;
|
private long _teleportProtectEndTime = 0;
|
||||||
|
|
||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -699,7 +699,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -722,7 +722,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -5013,13 +5013,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5441,7 +5441,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5492,16 +5492,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5519,16 +5509,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10425,14 +10405,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10532,14 +10509,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -11733,38 +11707,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11774,8 +11737,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11787,8 +11749,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11821,7 +11782,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13233,7 +13194,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13276,7 +13237,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13295,7 +13256,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13314,7 +13275,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13674,22 +13635,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13698,7 +13649,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13708,7 +13659,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13716,12 +13667,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13732,7 +13683,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13752,7 +13703,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13761,7 +13712,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13793,16 +13744,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13892,16 +13833,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13911,7 +13842,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13925,11 +13856,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13938,11 +13868,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13952,11 +13881,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -412,14 +412,11 @@ public final class FeedableBeasts extends AbstractNpcAI
|
|||||||
// if this is finally a trained mob, then despawn any other trained mobs that the
|
// if this is finally a trained mob, then despawn any other trained mobs that the
|
||||||
// player might have and initialize the Tamed Beast.
|
// player might have and initialize the Tamed Beast.
|
||||||
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
||||||
{
|
|
||||||
if ((player.getTrainedBeasts() != null) && !player.getTrainedBeasts().isEmpty())
|
|
||||||
{
|
{
|
||||||
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
||||||
{
|
{
|
||||||
oldTrained.deleteMe();
|
oldTrained.deleteMe();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
||||||
nextNpc.setRunning();
|
nextNpc.setRunning();
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+33
-109
@@ -603,12 +603,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
// client radar
|
// client radar
|
||||||
// TODO: This needs to be better integrated and saved/loaded
|
// TODO: This needs to be better integrated and saved/loaded
|
||||||
@@ -675,10 +675,10 @@ public final class PlayerInstance extends Playable
|
|||||||
private long _spawnProtectEndTime = 0;
|
private long _spawnProtectEndTime = 0;
|
||||||
private long _teleportProtectEndTime = 0;
|
private long _teleportProtectEndTime = 0;
|
||||||
|
|
||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -699,7 +699,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -722,7 +722,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -5013,13 +5013,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5441,7 +5441,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5492,16 +5492,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5519,16 +5509,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10425,14 +10405,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10532,14 +10509,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -11733,38 +11707,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11774,8 +11737,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11787,8 +11749,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11821,7 +11782,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13233,7 +13194,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13276,7 +13237,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13295,7 +13256,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13314,7 +13275,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13674,22 +13635,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13698,7 +13649,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13708,7 +13659,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13716,12 +13667,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13732,7 +13683,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13752,7 +13703,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13761,7 +13712,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13793,16 +13744,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13892,16 +13833,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13911,7 +13842,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13925,11 +13856,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13938,11 +13868,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13952,11 +13881,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -412,14 +412,11 @@ public final class FeedableBeasts extends AbstractNpcAI
|
|||||||
// if this is finally a trained mob, then despawn any other trained mobs that the
|
// if this is finally a trained mob, then despawn any other trained mobs that the
|
||||||
// player might have and initialize the Tamed Beast.
|
// player might have and initialize the Tamed Beast.
|
||||||
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
if (CommonUtil.contains(TAMED_BEASTS, nextNpcId))
|
||||||
{
|
|
||||||
if ((player.getTrainedBeasts() != null) && !player.getTrainedBeasts().isEmpty())
|
|
||||||
{
|
{
|
||||||
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
for (TamedBeastInstance oldTrained : player.getTrainedBeasts())
|
||||||
{
|
{
|
||||||
oldTrained.deleteMe();
|
oldTrained.deleteMe();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
final TamedBeastInstance nextNpc = new TamedBeastInstance(nextNpcId, player, food - FOODSKILLDIFF, npc.getX(), npc.getY(), npc.getZ());
|
||||||
nextNpc.setRunning();
|
nextNpc.setRunning();
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+33
-109
@@ -603,12 +603,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
// client radar
|
// client radar
|
||||||
// TODO: This needs to be better integrated and saved/loaded
|
// TODO: This needs to be better integrated and saved/loaded
|
||||||
@@ -675,10 +675,10 @@ public final class PlayerInstance extends Playable
|
|||||||
private long _spawnProtectEndTime = 0;
|
private long _spawnProtectEndTime = 0;
|
||||||
private long _teleportProtectEndTime = 0;
|
private long _teleportProtectEndTime = 0;
|
||||||
|
|
||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -699,7 +699,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -722,7 +722,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -5014,13 +5014,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5442,7 +5442,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5493,16 +5493,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5520,16 +5510,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10431,14 +10411,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10538,14 +10515,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -11739,38 +11713,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11780,8 +11743,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11793,8 +11755,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11827,7 +11788,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13239,7 +13200,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13282,7 +13243,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13301,7 +13262,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13320,7 +13281,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13680,22 +13641,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13704,7 +13655,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13714,7 +13665,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13722,12 +13673,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13738,7 +13689,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13758,7 +13709,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13767,7 +13718,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13799,16 +13750,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13898,16 +13839,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13917,7 +13848,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13931,11 +13862,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13944,11 +13874,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13958,11 +13887,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-31
@@ -31,7 +31,6 @@ import java.util.HashMap;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
@@ -462,7 +461,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _masteryPenalty = 0;
|
private int _masteryPenalty = 0;
|
||||||
private ItemInstance _activeEnchantItem = null;
|
private ItemInstance _activeEnchantItem = null;
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
protected Map<Integer, CubicInstance> _cubics = new HashMap<>();
|
protected Map<Integer, CubicInstance> _cubics = new ConcurrentHashMap<>();
|
||||||
protected Map<Integer, Integer> _activeSoulShots = new ConcurrentHashMap<>();
|
protected Map<Integer, Integer> _activeSoulShots = new ConcurrentHashMap<>();
|
||||||
public final ReentrantLock soulShotLock = new ReentrantLock();
|
public final ReentrantLock soulShotLock = new ReentrantLock();
|
||||||
public Quest dialog = null;
|
public Quest dialog = null;
|
||||||
@@ -710,8 +709,6 @@ public final class PlayerInstance extends Playable
|
|||||||
// cancel the recent fake-death protection instantly if the player attacks or casts spells
|
// cancel the recent fake-death protection instantly if the player attacks or casts spells
|
||||||
getPlayer().setRecentFakeDeath(false);
|
getPlayer().setRecentFakeDeath(false);
|
||||||
|
|
||||||
synchronized (_cubics)
|
|
||||||
{
|
|
||||||
for (CubicInstance cubic : _cubics.values())
|
for (CubicInstance cubic : _cubics.values())
|
||||||
{
|
{
|
||||||
if (cubic.getId() != CubicInstance.LIFE_CUBIC)
|
if (cubic.getId() != CubicInstance.LIFE_CUBIC)
|
||||||
@@ -720,7 +717,6 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doCast(Skill skill)
|
public void doCast(Skill skill)
|
||||||
@@ -769,8 +765,6 @@ public final class PlayerInstance extends Playable
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized (_cubics)
|
|
||||||
{
|
|
||||||
for (CubicInstance cubic : _cubics.values())
|
for (CubicInstance cubic : _cubics.values())
|
||||||
{
|
{
|
||||||
if ((cubic != null) && (cubic.getId() != CubicInstance.LIFE_CUBIC))
|
if ((cubic != null) && (cubic.getId() != CubicInstance.LIFE_CUBIC))
|
||||||
@@ -778,7 +772,6 @@ public final class PlayerInstance extends Playable
|
|||||||
cubic.doAction();
|
cubic.doAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1328,7 +1321,6 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return _ai;
|
return _ai;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3571,7 +3563,6 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
synchronized (_movingTaskDefined)
|
synchronized (_movingTaskDefined)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!_movingTaskDefined)
|
if (!_movingTaskDefined)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -11910,13 +11901,9 @@ public final class PlayerInstance extends Playable
|
|||||||
* @return the cubics
|
* @return the cubics
|
||||||
*/
|
*/
|
||||||
public Map<Integer, CubicInstance> getCubics()
|
public Map<Integer, CubicInstance> getCubics()
|
||||||
{
|
|
||||||
synchronized (_cubics)
|
|
||||||
{
|
{
|
||||||
// clean cubics instances
|
// clean cubics instances
|
||||||
final Set<Integer> cubicsIds = _cubics.keySet();
|
for (Integer id : _cubics.keySet())
|
||||||
|
|
||||||
for (Integer id : cubicsIds)
|
|
||||||
{
|
{
|
||||||
if ((id == null) || (_cubics.get(id) == null))
|
if ((id == null) || (_cubics.get(id) == null))
|
||||||
{
|
{
|
||||||
@@ -11933,7 +11920,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
return _cubics;
|
return _cubics;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a CubicInstance to the PlayerInstance _cubics.<BR>
|
* Add a CubicInstance to the PlayerInstance _cubics.<BR>
|
||||||
@@ -11949,12 +11935,8 @@ public final class PlayerInstance extends Playable
|
|||||||
public void addCubic(int id, int level, double matk, int activationtime, int activationchance, int totalLifetime, boolean givenByOther)
|
public void addCubic(int id, int level, double matk, int activationtime, int activationchance, int totalLifetime, boolean givenByOther)
|
||||||
{
|
{
|
||||||
final CubicInstance cubic = new CubicInstance(this, id, level, (int) matk, activationtime, activationchance, totalLifetime, givenByOther);
|
final CubicInstance cubic = new CubicInstance(this, id, level, (int) matk, activationtime, activationchance, totalLifetime, givenByOther);
|
||||||
|
|
||||||
synchronized (_cubics)
|
|
||||||
{
|
|
||||||
_cubics.put(id, cubic);
|
_cubics.put(id, cubic);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a CubicInstance from the PlayerInstance _cubics.<BR>
|
* Remove a CubicInstance from the PlayerInstance _cubics.<BR>
|
||||||
@@ -11962,12 +11944,9 @@ public final class PlayerInstance extends Playable
|
|||||||
* @param id the id
|
* @param id the id
|
||||||
*/
|
*/
|
||||||
public void delCubic(int id)
|
public void delCubic(int id)
|
||||||
{
|
|
||||||
synchronized (_cubics)
|
|
||||||
{
|
{
|
||||||
_cubics.remove(id);
|
_cubics.remove(id);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the CubicInstance corresponding to the Identifier of the PlayerInstance _cubics.<BR>
|
* Return the CubicInstance corresponding to the Identifier of the PlayerInstance _cubics.<BR>
|
||||||
@@ -11976,18 +11955,13 @@ public final class PlayerInstance extends Playable
|
|||||||
* @return the cubic
|
* @return the cubic
|
||||||
*/
|
*/
|
||||||
public CubicInstance getCubic(int id)
|
public CubicInstance getCubic(int id)
|
||||||
{
|
|
||||||
synchronized (_cubics)
|
|
||||||
{
|
{
|
||||||
return _cubics.get(id);
|
return _cubics.get(id);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void unsummonAllCubics()
|
public void unsummonAllCubics()
|
||||||
{
|
{
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
synchronized (_cubics)
|
|
||||||
{
|
|
||||||
if (_cubics.size() > 0)
|
if (_cubics.size() > 0)
|
||||||
{
|
{
|
||||||
for (CubicInstance cubic : _cubics.values())
|
for (CubicInstance cubic : _cubics.values())
|
||||||
@@ -11999,7 +11973,6 @@ public final class PlayerInstance extends Playable
|
|||||||
_cubics.clear();
|
_cubics.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
@@ -13700,12 +13673,10 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
synchronized (getAllSkills())
|
synchronized (getAllSkills())
|
||||||
{
|
{
|
||||||
|
|
||||||
for (Skill oldSkill : getAllSkills())
|
for (Skill oldSkill : getAllSkills())
|
||||||
{
|
{
|
||||||
super.removeSkill(oldSkill);
|
super.removeSkill(oldSkill);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rebind CursedWeapon passive.
|
// Rebind CursedWeapon passive.
|
||||||
|
|||||||
+3
-3
@@ -5008,13 +5008,13 @@ public final class PlayerInstance extends Playable
|
|||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (_isFakeDeath)
|
if (_isFakeDeath)
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (killer != null)
|
if (killer != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -115,6 +114,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -594,12 +594,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -671,7 +671,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -688,7 +688,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -711,7 +711,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2006,11 +2006,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4280,9 +4276,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -4998,13 +5001,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5425,7 +5428,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5476,16 +5479,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5503,16 +5496,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10367,14 +10350,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10474,14 +10454,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10871,16 +10848,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11592,38 +11559,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11633,8 +11589,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11646,8 +11601,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11680,7 +11634,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13093,7 +13047,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13136,7 +13090,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13155,7 +13109,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13174,7 +13128,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13542,22 +13496,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13566,7 +13510,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13576,7 +13520,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13584,12 +13528,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13600,7 +13544,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13620,7 +13564,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13629,7 +13573,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13661,16 +13605,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13761,16 +13695,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13780,7 +13704,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13794,11 +13718,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13807,11 +13730,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13821,11 +13743,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -115,6 +114,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -595,12 +595,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -672,7 +672,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -689,7 +689,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -712,7 +712,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2007,11 +2007,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4281,9 +4277,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -4999,13 +5002,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5426,7 +5429,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5477,16 +5480,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5504,16 +5497,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10374,14 +10357,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10481,14 +10461,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10878,16 +10855,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11599,38 +11566,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11640,8 +11596,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11653,8 +11608,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11687,7 +11641,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13100,7 +13054,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13143,7 +13097,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13162,7 +13116,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13181,7 +13135,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13549,22 +13503,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13573,7 +13517,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13583,7 +13527,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13591,12 +13535,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13607,7 +13551,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13627,7 +13571,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13636,7 +13580,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13668,16 +13612,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13768,16 +13702,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13787,7 +13711,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13801,11 +13725,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13814,11 +13737,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13828,11 +13750,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -115,6 +114,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -593,12 +593,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -670,7 +670,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -687,7 +687,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -710,7 +710,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2005,11 +2005,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4264,9 +4260,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -4983,13 +4986,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5410,7 +5413,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5461,16 +5464,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5488,16 +5481,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10359,14 +10342,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10466,14 +10446,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10863,16 +10840,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11584,38 +11551,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11625,8 +11581,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11638,8 +11593,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11672,7 +11626,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13085,7 +13039,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13128,7 +13082,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13147,7 +13101,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13166,7 +13120,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13534,22 +13488,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13558,7 +13502,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13568,7 +13512,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13576,12 +13520,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13592,7 +13536,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13612,7 +13556,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13621,7 +13565,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13653,16 +13597,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13752,16 +13686,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13771,7 +13695,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13785,11 +13709,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13798,11 +13721,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13812,11 +13734,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -115,6 +114,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -593,12 +593,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -670,7 +670,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -687,7 +687,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -710,7 +710,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2005,11 +2005,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4264,9 +4260,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -4983,13 +4986,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5410,7 +5413,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5461,16 +5464,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5488,16 +5481,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10359,14 +10342,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10466,14 +10446,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10863,16 +10840,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11584,38 +11551,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11625,8 +11581,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11638,8 +11593,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11672,7 +11626,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13085,7 +13039,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13128,7 +13082,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13147,7 +13101,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13166,7 +13120,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13534,22 +13488,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13558,7 +13502,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13568,7 +13512,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13576,12 +13520,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13592,7 +13536,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13612,7 +13556,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13621,7 +13565,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13653,16 +13597,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13752,16 +13686,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13771,7 +13695,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13785,11 +13709,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13798,11 +13721,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13812,11 +13734,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -712,7 +712,7 @@ public final class EffectList
|
|||||||
* @param info
|
* @param info
|
||||||
* @param removed
|
* @param removed
|
||||||
*/
|
*/
|
||||||
private synchronized void removeActive(BuffInfo info, boolean removed)
|
private void removeActive(BuffInfo info, boolean removed)
|
||||||
{
|
{
|
||||||
if (!_actives.isEmpty())
|
if (!_actives.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -790,7 +790,7 @@ public final class EffectList
|
|||||||
updateEffectList(true);
|
updateEffectList(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addActive(BuffInfo info)
|
private void addActive(BuffInfo info)
|
||||||
{
|
{
|
||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
|
|
||||||
|
|||||||
+41
-124
@@ -51,7 +51,6 @@ import org.l2jmobius.commons.util.Rnd;
|
|||||||
import org.l2jmobius.gameserver.GameTimeController;
|
import org.l2jmobius.gameserver.GameTimeController;
|
||||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||||
import org.l2jmobius.gameserver.LoginServerThread;
|
import org.l2jmobius.gameserver.LoginServerThread;
|
||||||
import org.l2jmobius.gameserver.RecipeController;
|
|
||||||
import org.l2jmobius.gameserver.ai.CreatureAI;
|
import org.l2jmobius.gameserver.ai.CreatureAI;
|
||||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import org.l2jmobius.gameserver.ai.PlayerAI;
|
import org.l2jmobius.gameserver.ai.PlayerAI;
|
||||||
@@ -115,6 +114,7 @@ import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
|||||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
|
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||||
@@ -593,12 +593,12 @@ public final class PlayerInstance extends Playable
|
|||||||
/** The Pet of the PlayerInstance */
|
/** The Pet of the PlayerInstance */
|
||||||
private PetInstance _pet = null;
|
private PetInstance _pet = null;
|
||||||
/** Servitors of the PlayerInstance */
|
/** Servitors of the PlayerInstance */
|
||||||
private volatile Map<Integer, Summon> _servitors = null;
|
private volatile Map<Integer, Summon> _servitors = new ConcurrentHashMap<>(1);
|
||||||
/** The Agathion of the PlayerInstance */
|
/** The Agathion of the PlayerInstance */
|
||||||
private int _agathionId = 0;
|
private int _agathionId = 0;
|
||||||
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
// apparently, a PlayerInstance CAN have both a summon AND a tamed beast at the same time!!
|
||||||
// after Freya players can control more than one tamed beast
|
// after Freya players can control more than one tamed beast
|
||||||
private volatile Set<TamedBeastInstance> _tamedBeast = null;
|
private volatile Set<TamedBeastInstance> _tamedBeast = ConcurrentHashMap.newKeySet();
|
||||||
|
|
||||||
private boolean _minimapAllowed = false;
|
private boolean _minimapAllowed = false;
|
||||||
|
|
||||||
@@ -670,7 +670,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
private volatile Map<Integer, ExResponseCommissionInfo> _lastCommissionInfos;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events;
|
private volatile Map<Class<? extends AbstractEvent>, AbstractEvent<?>> _events = new ConcurrentHashMap<>();
|
||||||
private boolean _isOnCustomEvent = false;
|
private boolean _isOnCustomEvent = false;
|
||||||
|
|
||||||
// protects a char from aggro mobs when getting up from fake death
|
// protects a char from aggro mobs when getting up from fake death
|
||||||
@@ -687,7 +687,7 @@ public final class PlayerInstance extends Playable
|
|||||||
private int _expertiseWeaponPenalty = 0;
|
private int _expertiseWeaponPenalty = 0;
|
||||||
private int _expertisePenaltyBonus = 0;
|
private int _expertisePenaltyBonus = 0;
|
||||||
|
|
||||||
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests;
|
private volatile Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
protected boolean _inventoryDisable = false;
|
protected boolean _inventoryDisable = false;
|
||||||
/** Player's cubics. */
|
/** Player's cubics. */
|
||||||
@@ -710,7 +710,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
private final BlockList _blockList = new BlockList(this);
|
private final BlockList _blockList = new BlockList(this);
|
||||||
|
|
||||||
private volatile Map<Integer, Skill> _transformSkills;
|
private final Map<Integer, Skill> _transformSkills = new ConcurrentHashMap<>();
|
||||||
private ScheduledFuture<?> _taskRentPet;
|
private ScheduledFuture<?> _taskRentPet;
|
||||||
private ScheduledFuture<?> _taskWater;
|
private ScheduledFuture<?> _taskWater;
|
||||||
|
|
||||||
@@ -2005,11 +2005,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public int getWeightPenalty()
|
public int getWeightPenalty()
|
||||||
{
|
{
|
||||||
if (_dietMode)
|
return _dietMode ? 0 : _curWeightPenalty;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return _curWeightPenalty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4264,9 +4260,16 @@ public final class PlayerInstance extends Playable
|
|||||||
sendPacket(ActionFailed.STATIC_PACKET);
|
sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|
||||||
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
if ((targetPlayer.getPrivateStoreType() == PrivateStoreType.SELL) || (targetPlayer.getPrivateStoreType() == PrivateStoreType.PACKAGE_SELL))
|
||||||
|
{
|
||||||
|
if (_isSellingBuffs)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(this, targetPlayer, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
sendPacket(new PrivateStoreListSell(this, targetPlayer));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
else if (targetPlayer.getPrivateStoreType() == PrivateStoreType.BUY)
|
||||||
{
|
{
|
||||||
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
sendPacket(new PrivateStoreListBuy(this, targetPlayer));
|
||||||
@@ -4983,13 +4986,13 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
stopFeed();
|
stopFeed();
|
||||||
}
|
}
|
||||||
synchronized (this)
|
// synchronized (this)
|
||||||
{
|
// {
|
||||||
if (isFakeDeath())
|
if (isFakeDeath())
|
||||||
{
|
{
|
||||||
stopFakeDeath(true);
|
stopFakeDeath(true);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Unsummon Cubics
|
// Unsummon Cubics
|
||||||
if (!_cubics.isEmpty())
|
if (!_cubics.isEmpty())
|
||||||
@@ -5410,7 +5413,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public Map<Integer, Summon> getServitors()
|
public Map<Integer, Summon> getServitors()
|
||||||
{
|
{
|
||||||
return _servitors == null ? Collections.emptyMap() : _servitors;
|
return _servitors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Summon getAnyServitor()
|
public Summon getAnyServitor()
|
||||||
@@ -5461,16 +5464,6 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addServitor(Summon servitor)
|
public void addServitor(Summon servitor)
|
||||||
{
|
{
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_servitors == null)
|
|
||||||
{
|
|
||||||
_servitors = new ConcurrentHashMap<>(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_servitors.put(servitor.getObjectId(), servitor);
|
_servitors.put(servitor.getObjectId(), servitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5488,16 +5481,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
public void addTrainedBeast(TamedBeastInstance tamedBeast)
|
||||||
{
|
{
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_tamedBeast == null)
|
|
||||||
{
|
|
||||||
_tamedBeast = ConcurrentHashMap.newKeySet();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_tamedBeast.add(tamedBeast);
|
_tamedBeast.add(tamedBeast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10359,14 +10342,11 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trained beast is lost after teleport
|
// Trained beast is lost after teleport
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.deleteMe();
|
tamedBeast.deleteMe();
|
||||||
}
|
}
|
||||||
_tamedBeast.clear();
|
_tamedBeast.clear();
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the position of the pet if necessary
|
// Modify the position of the pet if necessary
|
||||||
if (_pet != null)
|
if (_pet != null)
|
||||||
@@ -10466,14 +10446,11 @@ public final class PlayerInstance extends Playable
|
|||||||
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
super.reduceCurrentHp(value, attacker, skill, isDOT, directlyToHp, critical, reflect);
|
||||||
|
|
||||||
// notify the tamed beast of attacks
|
// notify the tamed beast of attacks
|
||||||
if (_tamedBeast != null)
|
|
||||||
{
|
|
||||||
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
for (TamedBeastInstance tamedBeast : _tamedBeast)
|
||||||
{
|
{
|
||||||
tamedBeast.onOwnerGotAttacked(attacker);
|
tamedBeast.onOwnerGotAttacked(attacker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastSnoop(ChatType type, String name, String _text)
|
public void broadcastSnoop(ChatType type, String name, String _text)
|
||||||
{
|
{
|
||||||
@@ -10863,16 +10840,6 @@ public final class PlayerInstance extends Playable
|
|||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop crafting, if in progress
|
|
||||||
try
|
|
||||||
{
|
|
||||||
RecipeController.getInstance().requestMakeItemAbort(this);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "deleteMe()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel Attak or Cast
|
// Cancel Attak or Cast
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -11584,38 +11551,27 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
public void addTransformSkill(Skill skill)
|
public void addTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_transformSkills == null)
|
|
||||||
{
|
|
||||||
_transformSkills = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_transformSkills.put(skill.getId(), skill);
|
_transformSkills.put(skill.getId(), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkill(Skill skill)
|
public boolean hasTransformSkill(Skill skill)
|
||||||
{
|
{
|
||||||
return (_transformSkills != null) && (_transformSkills.get(skill.getId()) == skill);
|
return !_transformSkills.isEmpty() && (_transformSkills.get(skill.getId()) == skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTransformSkills()
|
public boolean hasTransformSkills()
|
||||||
{
|
{
|
||||||
return (_transformSkills != null);
|
return !_transformSkills.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Skill> getAllTransformSkills()
|
public Collection<Skill> getAllTransformSkills()
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return _transformSkills.values();
|
||||||
return transformSkills != null ? transformSkills.values() : Collections.emptyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeAllTransformSkills()
|
public void removeAllTransformSkills()
|
||||||
{
|
{
|
||||||
_transformSkills = null;
|
_transformSkills.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11625,8 +11581,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public final Skill getKnownSkill(int skillId)
|
public final Skill getKnownSkill(int skillId)
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
return !_transformSkills.isEmpty() ? _transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
||||||
return transformSkills != null ? transformSkills.getOrDefault(skillId, super.getKnownSkill(skillId)) : super.getKnownSkill(skillId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11638,8 +11593,7 @@ public final class PlayerInstance extends Playable
|
|||||||
|
|
||||||
if (isTransformed())
|
if (isTransformed())
|
||||||
{
|
{
|
||||||
final Map<Integer, Skill> transformSkills = _transformSkills;
|
if (!_transformSkills.isEmpty())
|
||||||
if (transformSkills != null)
|
|
||||||
{
|
{
|
||||||
// Include transformation skills and those skills that are allowed during transformation.
|
// Include transformation skills and those skills that are allowed during transformation.
|
||||||
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
currentSkills = currentSkills.stream().filter(Skill::allowOnTransform).collect(Collectors.toList());
|
||||||
@@ -11672,7 +11626,7 @@ public final class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Include transformation skills.
|
// Include transformation skills.
|
||||||
currentSkills.addAll(transformSkills.values());
|
currentSkills.addAll(_transformSkills.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13085,7 +13039,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canRevive()
|
public boolean canRevive()
|
||||||
{
|
{
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13128,7 +13082,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13147,7 +13101,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13166,7 +13120,7 @@ public final class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (_events != null)
|
if (!_events.isEmpty())
|
||||||
{
|
{
|
||||||
for (AbstractEvent<?> listener : _events.values())
|
for (AbstractEvent<?> listener : _events.values())
|
||||||
{
|
{
|
||||||
@@ -13534,22 +13488,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean addRequest(AbstractRequest request)
|
public boolean addRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_requests == null)
|
|
||||||
{
|
|
||||||
_requests = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
return canRequest(request) && (_requests.putIfAbsent(request.getClass(), request) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canRequest(AbstractRequest request)
|
public boolean canRequest(AbstractRequest request)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().allMatch(request::canWorkWith);
|
return !_requests.isEmpty() && _requests.values().stream().allMatch(request::canWorkWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13558,7 +13502,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
public boolean removeRequest(Class<? extends AbstractRequest> clazz)
|
||||||
{
|
{
|
||||||
return (_requests != null) && (_requests.remove(clazz) != null);
|
return !_requests.isEmpty() && (_requests.remove(clazz) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13568,7 +13512,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
public <T extends AbstractRequest> T getRequest(Class<T> requestClass)
|
||||||
{
|
{
|
||||||
return _requests != null ? requestClass.cast(_requests.get(requestClass)) : null;
|
return !_requests.isEmpty() ? requestClass.cast(_requests.get(requestClass)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13576,12 +13520,12 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean hasRequests()
|
public boolean hasRequests()
|
||||||
{
|
{
|
||||||
return (_requests != null) && !_requests.isEmpty();
|
return !_requests.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItemRequest()
|
public boolean hasItemRequest()
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(AbstractRequest::isItemRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13592,7 +13536,7 @@ public final class PlayerInstance extends Playable
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
public final boolean hasRequest(Class<? extends AbstractRequest> requestClass, Class<? extends AbstractRequest>... classes)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
for (Class<? extends AbstractRequest> clazz : classes)
|
for (Class<? extends AbstractRequest> clazz : classes)
|
||||||
{
|
{
|
||||||
@@ -13612,7 +13556,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isProcessingItem(int objectId)
|
public boolean isProcessingItem(int objectId)
|
||||||
{
|
{
|
||||||
return (_requests != null) && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
return !_requests.isEmpty() && _requests.values().stream().anyMatch(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13621,7 +13565,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public void removeRequestsThatProcessesItem(int objectId)
|
public void removeRequestsThatProcessesItem(int objectId)
|
||||||
{
|
{
|
||||||
if (_requests != null)
|
if (!_requests.isEmpty())
|
||||||
{
|
{
|
||||||
_requests.values().removeIf(req -> req.isUsing(objectId));
|
_requests.values().removeIf(req -> req.isUsing(objectId));
|
||||||
}
|
}
|
||||||
@@ -13653,16 +13597,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
public Map<Integer, ExResponseCommissionInfo> getLastCommissionInfos()
|
||||||
{
|
{
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_lastCommissionInfos == null)
|
|
||||||
{
|
|
||||||
_lastCommissionInfos = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _lastCommissionInfos;
|
return _lastCommissionInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13752,16 +13686,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean registerOnEvent(AbstractEvent<?> event)
|
public boolean registerOnEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
synchronized (this)
|
|
||||||
{
|
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
_events = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _events.putIfAbsent(event.getClass(), event) == null;
|
return _events.putIfAbsent(event.getClass(), event) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13771,7 +13695,7 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromEvent(AbstractEvent<?> event)
|
public boolean removeFromEvent(AbstractEvent<?> event)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -13785,11 +13709,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
public <T extends AbstractEvent<?>> T getEvent(Class<T> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
return _events.values().stream().filter(event -> clazz.isAssignableFrom(event.getClass())).map(clazz::cast).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13798,11 +13721,10 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public AbstractEvent<?> getEvent()
|
public AbstractEvent<?> getEvent()
|
||||||
{
|
{
|
||||||
if (_events == null)
|
if (_events.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _events.values().stream().findFirst().orElse(null);
|
return _events.values().stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13812,11 +13734,6 @@ public final class PlayerInstance extends Playable
|
|||||||
*/
|
*/
|
||||||
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
public boolean isOnEvent(Class<? extends AbstractEvent<?>> clazz)
|
||||||
{
|
{
|
||||||
if (_events == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _events.containsKey(clazz);
|
return _events.containsKey(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -178,7 +178,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
@@ -311,7 +311,7 @@ public final class TamedBeastInstance extends FeedableBeastInstance
|
|||||||
stopHpMpRegeneration();
|
stopHpMpRegeneration();
|
||||||
|
|
||||||
// clean up variables
|
// clean up variables
|
||||||
if ((_owner != null) && (_owner.getTrainedBeasts() != null))
|
if (_owner != null)
|
||||||
{
|
{
|
||||||
_owner.getTrainedBeasts().remove(this);
|
_owner.getTrainedBeasts().remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user