Sync with L2jServer HighFive May 19th 2015.

This commit is contained in:
MobiusDev
2015-05-19 14:57:13 +00:00
parent 0337dd64a2
commit 6b9ed81821
17 changed files with 146 additions and 124 deletions

View File

@ -33,6 +33,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.StampedLock;
import java.util.logging.Level;
@ -263,7 +264,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
/** This creature's target. */
private L2Object _target;
// set by the start of attack, in game ticks
/** Represents the time where the attack should end, in nanoseconds. */
private volatile long _attackEndTime;
private int _disableBowAttackEndTime;
private int _disableCrossBowAttackEndTime;
@ -1093,7 +1094,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
final int timeAtk = calculateTimeBetweenAttacks(target, weaponItem);
// the hit is calculated to happen halfway to the animation - might need further tuning e.g. in bow case
final int timeToHit = timeAtk / 2;
_attackEndTime = System.currentTimeMillis() + timeAtk;
_attackEndTime = System.nanoTime() + TimeUnit.NANOSECONDS.convert(timeAtk, TimeUnit.MILLISECONDS);
final int ssGrade = (weaponItem != null) ? weaponItem.getItemGrade().ordinal() : 0;
// Create a Server->Client packet Attack
Attack attack = new Attack(this, target, wasSSCharged, ssGrade);
@ -4061,11 +4062,12 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
}
/**
* @return True if the L2Character is attacking.
* Verifies if the creature is attacking now.
* @return {@code true} if the creature is attacking now, {@code false} otherwise
*/
public final boolean isAttackingNow()
{
return _attackEndTime > System.currentTimeMillis();
return _attackEndTime > System.nanoTime();
}
/**
@ -5539,9 +5541,9 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
if ((targets.length > 0) && (escapeRange > 0))
{
int _skiprange = 0;
int _skipgeo = 0;
int _skippeace = 0;
int skipRange = 0;
int skipLOS = 0;
int skipPeaceZone = 0;
final List<L2Object> targetList = new ArrayList<>();
for (L2Object target : targets)
{
@ -5549,21 +5551,25 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
{
if (!isInsideRadius(target.getX(), target.getY(), target.getZ(), escapeRange + getTemplate().getCollisionRadius(), true, false))
{
_skiprange++;
skipRange++;
continue;
}
if ((escapeRange > 0) && !GeoData.getInstance().canSeeTarget(this, target))
// Healing party members should ignore LOS.
if (((skill.getTargetType() != L2TargetType.PARTY) || !skill.hasEffectType(L2EffectType.HEAL)) //
&& !GeoData.getInstance().canSeeTarget(this, target))
{
_skipgeo++;
skipLOS++;
continue;
}
if (skill.isBad())
{
if (isPlayer())
{
if (((L2Character) target).isInsidePeaceZone(getActingPlayer()))
{
_skippeace++;
skipPeaceZone++;
continue;
}
}
@ -5571,7 +5577,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
{
if (((L2Character) target).isInsidePeaceZone(this, target))
{
_skippeace++;
skipPeaceZone++;
continue;
}
}
@ -5583,15 +5589,15 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
{
if (isPlayer())
{
if (_skiprange > 0)
if (skipRange > 0)
{
sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
}
else if (_skipgeo > 0)
else if (skipLOS > 0)
{
sendPacket(SystemMessageId.CANNOT_SEE_TARGET);
}
else if (_skippeace > 0)
else if (skipPeaceZone > 0)
{
sendPacket(SystemMessageId.A_MALICIOUS_SKILL_CANNOT_BE_USED_IN_A_PEACE_ZONE);
}

View File

@ -30,14 +30,15 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Future;
@ -407,7 +408,7 @@ public final class L2PcInstance extends L2Playable
public static final String WORLD_CHAT_VARIABLE_NAME = "WORLD_CHAT_POINTS";
private final List<IEventListener> _eventListeners = new CopyOnWriteArrayList<>();
private final Queue<IEventListener> _eventListeners = new ConcurrentLinkedQueue<>();
private L2GameClient _client;
@ -9038,6 +9039,7 @@ public final class L2PcInstance extends L2Playable
case AURA:
case FRONT_AURA:
case BEHIND_AURA:
case AREA_SUMMON:
case GROUND:
case SELF:
break;
@ -14667,16 +14669,7 @@ public final class L2PcInstance extends L2Playable
public void removeEventListener(Class<? extends IEventListener> clazz)
{
final Iterator<IEventListener> it = _eventListeners.iterator();
IEventListener event;
while (it.hasNext())
{
event = it.next();
if (event.getClass() == clazz)
{
it.remove();
}
}
_eventListeners.removeIf(e -> e.getClass() == clazz);
}
public Collection<IEventListener> getEventListeners()

View File

@ -696,9 +696,9 @@ public class PcStat extends PlayableStat
}
}
public synchronized void updateVitalityPoints(int points, boolean useRates, boolean quiet)
public synchronized void updateVitalityPoints(int _value, boolean useRates, boolean quiet)
{
if ((points == 0) || !Config.ENABLE_VITALITY)
if ((_value == 0) || !Config.ENABLE_VITALITY)
{
return;
}
@ -710,7 +710,7 @@ public class PcStat extends PlayableStat
return;
}
if (points < 0) // vitality consumed
if (_value < 0) // vitality consumed
{
int stat = (int) calcStat(Stats.VITALITY_CONSUME_RATE, 1, getActiveChar(), null);
@ -720,37 +720,37 @@ public class PcStat extends PlayableStat
}
if (stat < 0)
{
points = -points;
_value = -_value;
}
}
if (points > 0)
if (_value > 0)
{
// vitality increased
points *= Config.RATE_VITALITY_GAIN;
_value *= Config.RATE_VITALITY_GAIN;
}
else
{
// vitality decreased
points *= Config.RATE_VITALITY_LOST;
_value *= Config.RATE_VITALITY_LOST;
}
}
if (points > 0)
if (_value > 0)
{
points = Math.min(getActiveChar().getVitalityPoints() + points, MAX_VITALITY_POINTS);
_value = Math.min(getActiveChar().getVitalityPoints() + _value, MAX_VITALITY_POINTS);
}
else
{
points = Math.max(getActiveChar().getVitalityPoints() + points, MIN_VITALITY_POINTS);
_value = Math.max(getActiveChar().getVitalityPoints() + _value, MIN_VITALITY_POINTS);
}
if (Math.abs(points - getActiveChar().getVitalityPoints()) <= 1e-6)
if (Math.abs(_value - getActiveChar().getVitalityPoints()) <= 1e-6)
{
return;
}
getActiveChar().setVitalityPoints(points);
getActiveChar().setVitalityPoints(_value);
}
public double getVitalityMultiplier()