Sync with L2JServer Jan 26th 2015.

This commit is contained in:
mobius
2015-01-27 01:59:37 +00:00
parent 5d7ab65416
commit bfe682bbe3
63 changed files with 1049 additions and 1306 deletions

View File

@@ -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));
}
}

View File

@@ -14455,6 +14455,10 @@ public final class L2PcInstance extends L2Playable
public boolean hasPremiumStatus()
{
if (!Config.PREMIUM_SYSTEM_ENABLED)
{
return false;
}
return _premiumStatus;
}

View File

@@ -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);