From c702c31255182ce82ec38c5603fc293811858965 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 26 Mar 2021 15:50:28 +0000 Subject: [PATCH] Disarm should re-equip item after effect ends. Contributed by Sahar. --- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 58 ++++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 58 ++++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- .../handlers/effecthandlers/Disarm.java | 56 +++++++++++++++++- 21 files changed, 1121 insertions(+), 59 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..78c193f834 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..78c193f834 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..78c193f834 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..78c193f834 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index d624bd042c..2d87c0e1a2 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index d624bd042c..2d87c0e1a2 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..78c193f834 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..78c193f834 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..78c193f834 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } } diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/Disarm.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/Disarm.java index e641db383b..3015d0b596 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/Disarm.java +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/Disarm.java @@ -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 _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); } }