Index: /java/net/sf/l2j/gameserver/serverpackets/Ride.java =================================================================== --- /java/net/sf/l2j/gameserver/serverpackets/Ride.java (revision 1121) +++ /java/net/sf/l2j/gameserver/serverpackets/Ride.java (working copy) @@ -17,7 +17,13 @@ * http://www.gnu.org/copyleft/gpl.html */ package net.sf.l2j.gameserver.serverpackets; +import net.sf.l2j.gameserver.model.L2ItemInstance; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.model.Inventory; +import net.sf.l2j.gameserver.network.SystemMessageId; +import javolution.util.FastList; + public class Ride extends L2GameServerPacket { private static final String _S__86_Ride = "[S] 86 Ride"; @@ -28,35 +34,87 @@ private int _rideType; private int _rideClassID; + /** + * 0x86 Ride dddd + * @param _ + */ public Ride(int id, int action, int rideClassId) + { + _id = id; + _bRide = action; // 1 for mount ; 2 for dismount + _rideClassID = rideClassId + 1000000; + _rideType = rideClassId == 12621 ? (short) 2 : (short) 1; // 2 for wyvern; 1 for other + } + public int getMountType() { - _id = id; // charobjectID - _bRide = action; // 1 for mount ; 2 for dismount - _rideClassID = rideClassId + 1000000; // npcID - - if (rideClassId == 12526 || //wind strider - rideClassId == 12527 || //star strider - rideClassId == 12528) //twilight strider - { - _rideType = 1; // 1 for Strider ; 2 for wyvern - } - else if (rideClassId == 12621) // wyvern - { - _rideType = 2; // 1 for Strider ; 2 for wyvern - } + return _rideType; } - @Override public void runImpl() { + L2PcInstance cha = getClient().getActiveChar(); + if(cha == null) + return; + if(cha.isCursedWeaponEquiped()) + return; - } + if(_bRide != 1) + return; + FastList modified = new FastList(); + + //Check for slots that can have weapons + L2ItemInstance wpn = cha.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND); + if(wpn != null) + { + modified.add(wpn); + sendDisarmMessage(wpn, cha); + } + cha.getInventory().unEquipItemInSlot(Inventory.PAPERDOLL_LHAND); + + wpn = cha.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LRHAND); + if(wpn != null) + { + modified.add(wpn); + sendDisarmMessage(wpn, cha); + } + cha.getInventory().unEquipItemInSlot(Inventory.PAPERDOLL_LRHAND); + + wpn = cha.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND); + if(wpn != null) + { + modified.add(wpn); + sendDisarmMessage(wpn, cha); + } + cha.getInventory().unEquipItemInSlot(Inventory.PAPERDOLL_RHAND); + + cha.refreshExpertisePenalty(); + cha.abortAttack(); + cha.abortCast(); + cha.broadcastUserInfo(); + + InventoryUpdate iu = new InventoryUpdate(); + for(L2ItemInstance i : modified) + iu.addItem(i); + cha.sendPacket(iu); + } + private void sendDisarmMessage(L2ItemInstance wpn, L2PcInstance cha) + { + if(wpn.getEnchantLevel() > 0) + { + SystemMessage sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED); + sm.addNumber(wpn.getEnchantLevel()); + sm.addItemName(wpn.getItemId()); + cha.sendPacket(sm); + } + else + { + SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISARMED); + sm.addItemName(wpn.getItemId()); + cha.sendPacket(sm); + } + } - public int getMountType() - { - return _rideType; - } - + @Override protected final void writeImpl() { @@ -70,6 +128,7 @@ /* (non-Javadoc) * @see net.sf.l2j.gameserver.serverpackets.ServerBasePacket#getType() */ + @Override public String getType() { return _S__86_Ride;