Sync with L2JServer Jan 26th 2015.
This commit is contained in:
@@ -19,10 +19,13 @@
|
||||
package com.l2jserver.gameserver.model.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
@@ -88,10 +91,10 @@ public class L2Attackable extends L2Npc
|
||||
private boolean _seeded = false;
|
||||
private L2Seed _seed = null;
|
||||
private int _seederObjId = 0;
|
||||
private ItemHolder _harvestItem;
|
||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||
// Spoil
|
||||
private int _spoilerObjectId;
|
||||
private ItemHolder[] _sweepItems;
|
||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||
// Over-hit
|
||||
private boolean _overhit;
|
||||
private double _overhitDamage;
|
||||
@@ -1001,14 +1004,10 @@ public class L2Attackable extends L2Npc
|
||||
|
||||
if (isSpoiled())
|
||||
{
|
||||
List<ItemHolder> sweepItems = npcTemplate.calculateDrops(DropListScope.CORPSE, this, player);
|
||||
if ((sweepItems != null) && !sweepItems.isEmpty())
|
||||
{
|
||||
_sweepItems = sweepItems.toArray(new ItemHolder[sweepItems.size()]);
|
||||
}
|
||||
_sweepItems.set(npcTemplate.calculateDrops(DropListScope.CORPSE, this, player));
|
||||
}
|
||||
|
||||
List<ItemHolder> deathItems = npcTemplate.calculateDrops(DropListScope.DEATH, this, player);
|
||||
Collection<ItemHolder> deathItems = npcTemplate.calculateDrops(DropListScope.DEATH, this, player);
|
||||
if (deathItems != null)
|
||||
{
|
||||
for (ItemHolder drop : deathItems)
|
||||
@@ -1156,7 +1155,7 @@ public class L2Attackable extends L2Npc
|
||||
@Override
|
||||
public boolean isSweepActive()
|
||||
{
|
||||
return _sweepItems != null;
|
||||
return _sweepItems.get() != null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1164,10 +1163,11 @@ public class L2Attackable extends L2Npc
|
||||
*/
|
||||
public List<L2Item> getSpoilLootItems()
|
||||
{
|
||||
final List<L2Item> lootItems = new ArrayList<>();
|
||||
if (isSweepActive())
|
||||
final Collection<ItemHolder> sweepItems = _sweepItems.get();
|
||||
final List<L2Item> lootItems = new LinkedList<>();
|
||||
if (sweepItems != null)
|
||||
{
|
||||
for (ItemHolder item : _sweepItems)
|
||||
for (ItemHolder item : sweepItems)
|
||||
{
|
||||
lootItems.add(ItemTable.getInstance().getTemplate(item.getId()));
|
||||
}
|
||||
@@ -1178,21 +1178,17 @@ public class L2Attackable extends L2Npc
|
||||
/**
|
||||
* @return table containing all L2ItemInstance that can be spoiled.
|
||||
*/
|
||||
public synchronized ItemHolder[] takeSweep()
|
||||
public Collection<ItemHolder> takeSweep()
|
||||
{
|
||||
ItemHolder[] sweep = _sweepItems;
|
||||
_sweepItems = null;
|
||||
return sweep;
|
||||
return _sweepItems.getAndSet(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return table containing all L2ItemInstance that can be harvested.
|
||||
*/
|
||||
public synchronized ItemHolder takeHarvest()
|
||||
public ItemHolder takeHarvest()
|
||||
{
|
||||
ItemHolder harvest = _harvestItem;
|
||||
_harvestItem = null;
|
||||
return harvest;
|
||||
return _harvestItem.getAndSet(null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1436,7 +1432,7 @@ public class L2Attackable extends L2Npc
|
||||
// Clear all aggro char from list
|
||||
clearAggroList();
|
||||
// Clear Harvester reward
|
||||
_harvestItem = null;
|
||||
_harvestItem.set(null);
|
||||
// Clear mod Seeded stat
|
||||
_seeded = false;
|
||||
_seed = null;
|
||||
@@ -1444,7 +1440,7 @@ public class L2Attackable extends L2Npc
|
||||
// Clear overhit value
|
||||
overhitEnabled(false);
|
||||
|
||||
_sweepItems = null;
|
||||
_sweepItems.set(null);
|
||||
resetAbsorbList();
|
||||
|
||||
setWalking();
|
||||
@@ -1534,7 +1530,7 @@ public class L2Attackable extends L2Npc
|
||||
{
|
||||
count += diff;
|
||||
}
|
||||
_harvestItem = new ItemHolder(_seed.getCropId(), count * Config.RATE_DROP_MANOR);
|
||||
_harvestItem.set(new ItemHolder(_seed.getCropId(), count * Config.RATE_DROP_MANOR));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -14455,6 +14455,10 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
public boolean hasPremiumStatus()
|
||||
{
|
||||
if (!Config.PREMIUM_SYSTEM_ENABLED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return _premiumStatus;
|
||||
}
|
||||
|
||||
|
@@ -19,7 +19,9 @@
|
||||
package com.l2jserver.gameserver.model.actor.templates;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -552,7 +554,7 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
||||
return dropLists != null ? dropLists.get(dropListScope) : null;
|
||||
}
|
||||
|
||||
public List<ItemHolder> calculateDrops(DropListScope dropListScope, L2Character victim, L2Character killer)
|
||||
public Collection<ItemHolder> calculateDrops(DropListScope dropListScope, L2Character victim, L2Character killer)
|
||||
{
|
||||
List<IDropItem> dropList = getDropList(dropListScope);
|
||||
if (dropList == null)
|
||||
@@ -560,10 +562,10 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
||||
return null;
|
||||
}
|
||||
|
||||
List<ItemHolder> calculatedDrops = null;
|
||||
Collection<ItemHolder> calculatedDrops = null;
|
||||
for (IDropItem dropItem : dropList)
|
||||
{
|
||||
List<ItemHolder> drops = dropItem.calculateDrops(victim, killer);
|
||||
final Collection<ItemHolder> drops = dropItem.calculateDrops(victim, killer);
|
||||
if ((drops == null) || drops.isEmpty())
|
||||
{
|
||||
continue;
|
||||
@@ -571,7 +573,7 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
||||
|
||||
if (calculatedDrops == null)
|
||||
{
|
||||
calculatedDrops = new ArrayList<>(drops.size());
|
||||
calculatedDrops = new LinkedList<>();
|
||||
}
|
||||
|
||||
calculatedDrops.addAll(drops);
|
||||
|
Reference in New Issue
Block a user