Sync with L2jServer HighFive Feb 15th 2015.

This commit is contained in:
mobius
2015-02-15 23:48:35 +00:00
parent f2d6aedabe
commit 06c765ea63
45 changed files with 474 additions and 843 deletions

View File

@ -18,6 +18,7 @@
*/
package com.l2jserver.gameserver.model.events;
import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
@ -36,6 +37,8 @@ import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.ScriptException;
import com.l2jserver.Config;
import com.l2jserver.gameserver.GameTimeController;
import com.l2jserver.gameserver.ai.CtrlIntention;
@ -113,6 +116,7 @@ import com.l2jserver.gameserver.model.events.returns.AbstractEventReturn;
import com.l2jserver.gameserver.model.events.returns.TerminateReturn;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.holders.SkillHolder;
import com.l2jserver.gameserver.model.interfaces.INamable;
import com.l2jserver.gameserver.model.interfaces.IPositionable;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
@ -131,21 +135,26 @@ import com.l2jserver.gameserver.network.serverpackets.ExUserInfoInvenWeight;
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jserver.gameserver.network.serverpackets.SpecialCamera;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.scripting.ManagedScript;
import com.l2jserver.gameserver.scripting.L2ScriptEngineManager;
import com.l2jserver.gameserver.scripting.ScriptManager;
import com.l2jserver.gameserver.util.MinionList;
import com.l2jserver.util.Rnd;
/**
* @author UnAfraid
* Abstract script.
* @author KenM, UnAfraid, Zoey76
*/
public abstract class AbstractScript extends ManagedScript
public abstract class AbstractScript implements INamable
{
protected static final Logger _log = Logger.getLogger(AbstractScript.class.getName());
public static final Logger _log = Logger.getLogger(AbstractScript.class.getName());
private final Map<ListenerRegisterType, Set<Integer>> _registeredIds = new ConcurrentHashMap<>();
private final List<AbstractEventListener> _listeners = new CopyOnWriteArrayList<>();
private final File _scriptFile;
private boolean _isActive;
public AbstractScript()
{
_scriptFile = L2ScriptEngineManager.getInstance().getCurrentLoadingScript();
initializeAnnotationListeners();
}
@ -300,10 +309,38 @@ public abstract class AbstractScript extends ManagedScript
}
}
public void setActive(boolean status)
{
_isActive = status;
}
public boolean isActive()
{
return _isActive;
}
public File getScriptFile()
{
return _scriptFile;
}
public boolean reload()
{
try
{
L2ScriptEngineManager.getInstance().executeScript(getScriptFile());
return true;
}
catch (ScriptException e)
{
return false;
}
}
/**
* Unloads all listeners registered by this class.
* @return {@code true}
*/
@Override
public boolean unload()
{
_listeners.forEach(AbstractEventListener::unregisterMe);
@ -311,6 +348,8 @@ public abstract class AbstractScript extends ManagedScript
return true;
}
public abstract ScriptManager<?> getManager();
// ---------------------------------------------------------------------------------------------------------------------------
/**
@ -1718,13 +1757,6 @@ public abstract class AbstractScript extends ManagedScript
{
try
{
final L2NpcTemplate template = NpcData.getInstance().getTemplate(npcId);
if (template == null)
{
_log.severe("Couldn't find NPC template for ID:" + npcId + "!");
return null;
}
if ((x == 0) && (y == 0))
{
_log.log(Level.SEVERE, "addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
@ -1748,7 +1780,7 @@ public abstract class AbstractScript extends ManagedScript
y += offset;
}
final L2Spawn spawn = new L2Spawn(template);
final L2Spawn spawn = new L2Spawn(npcId);
spawn.setInstanceId(instanceId);
spawn.setHeading(heading);
spawn.setX(x);
@ -2318,24 +2350,34 @@ public abstract class AbstractScript extends ManagedScript
*/
public static boolean takeItems(L2PcInstance player, int itemId, long amount)
{
// Get object item from player's inventory list
final L2ItemInstance item = player.getInventory().getItemByItemId(itemId);
if (item == null)
final List<L2ItemInstance> items = player.getInventory().getItemsByItemId(itemId);
if (amount < 0)
{
return false;
items.forEach(i -> takeItem(player, i, i.getCount()));
}
// Tests on count value in order not to have negative value
if ((amount < 0) || (amount > item.getCount()))
else
{
amount = item.getCount();
long currentCount = 0;
for (L2ItemInstance i : items)
{
long toDelete = i.getCount();
if ((currentCount + toDelete) > amount)
{
toDelete = amount - currentCount;
}
takeItem(player, i, toDelete);
currentCount += toDelete;
}
}
// Destroy the quantity of items wanted
return true;
}
private static boolean takeItem(L2PcInstance player, L2ItemInstance item, long toDelete)
{
if (item.isEquipped())
{
final L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(item.getItem().getBodyPart());
InventoryUpdate iu = new InventoryUpdate();
final InventoryUpdate iu = new InventoryUpdate();
for (L2ItemInstance itm : unequiped)
{
iu.addModifiedItem(itm);
@ -2343,7 +2385,7 @@ public abstract class AbstractScript extends ManagedScript
player.sendPacket(iu);
player.broadcastUserInfo();
}
return player.destroyItemByItemId("Quest", itemId, amount, player, true);
return player.destroyItemByItemId("Quest", item.getId(), toDelete, player, true);
}
/**