Disarm should re-equip item after effect ends.

Contributed by Sahar.
This commit is contained in:
MobiusDevelopment
2021-03-26 15:50:28 +00:00
parent cb36a42ce1
commit c702c31255
21 changed files with 1121 additions and 59 deletions

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,11 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.BuffInfo;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -28,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.BuffInfo;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(Condition attachCond, Condition applyCond, StatSet set, StatSet params)
{
super(attachCond, applyCond, set, params);
@@ -48,6 +57,53 @@ public class Disarm extends AbstractEffect
@Override
public void onStart(BuffInfo info)
{
info.getEffected().getActingPlayer().disarmWeapons();
final PlayerInstance player = info.getEffected().getActingPlayer();
if (player == null)
{
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendPacket(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(BuffInfo info)
{
final PlayerInstance player = info.getEffected().getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(player.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendPacket(iu);
}
}

View File

@@ -16,11 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.BuffInfo;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -28,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.BuffInfo;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(Condition attachCond, Condition applyCond, StatSet set, StatSet params)
{
super(attachCond, applyCond, set, params);
@@ -48,6 +57,53 @@ public class Disarm extends AbstractEffect
@Override
public void onStart(BuffInfo info)
{
info.getEffected().getActingPlayer().disarmWeapons();
final PlayerInstance player = info.getEffected().getActingPlayer();
if (player == null)
{
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendPacket(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(BuffInfo info)
{
final PlayerInstance player = info.getEffected().getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(player.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendPacket(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final int slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}

View File

@@ -16,13 +16,18 @@
*/
package handlers.effecthandlers;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
/**
* Disarm effect implementation.
@@ -30,6 +35,8 @@ import org.l2jmobius.gameserver.model.skills.Skill;
*/
public class Disarm extends AbstractEffect
{
private static final Map<Integer, Integer> _disarmedPlayers = new ConcurrentHashMap<>();
public Disarm(StatSet params)
{
}
@@ -47,12 +54,55 @@ public class Disarm extends AbstractEffect
}
@Override
public void continuousInstant(Creature effector, Creature effected, Skill skill, ItemInstance item)
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
if (player == null)
{
player.disarmWeapons();
return;
}
final ItemInstance itemToDisarm = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (itemToDisarm == null)
{
return;
}
final long slot = player.getInventory().getSlotFromItem(itemToDisarm);
player.getInventory().unEquipItemInBodySlot(slot);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemToDisarm);
player.sendInventoryUpdate(iu);
player.broadcastUserInfo();
_disarmedPlayers.put(player.getObjectId(), itemToDisarm.getObjectId());
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
final Integer itemObjectId = _disarmedPlayers.remove(effected.getObjectId());
if (itemObjectId == null)
{
return;
}
final ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
if (item == null)
{
return;
}
player.getInventory().equipItem(item);
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendInventoryUpdate(iu);
}
}