Ver código fonte

Core support for Remove attribute, thx Janiii and Charus

Gigiikun 16 anos atrás
pai
commit
4daeb43e58

+ 5 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2NpcInstance.java

@@ -69,6 +69,7 @@ import net.sf.l2j.gameserver.network.L2GameClient;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
 import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
+import net.sf.l2j.gameserver.network.serverpackets.ExShowBaseAttributeCancelWindow;
 import net.sf.l2j.gameserver.network.serverpackets.ExShowVariationCancelWindow;
 import net.sf.l2j.gameserver.network.serverpackets.ExShowVariationMakeWindow;
 import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
@@ -1283,6 +1284,10 @@ public class L2NpcInstance extends L2Character
 					DimensionalRiftManager.getInstance().handleCheat(player, this);
 				}
 			}
+			else if (command.startsWith("ReleaseAttribute"))
+			{
+				player.sendPacket(new ExShowBaseAttributeCancelWindow(player));
+			}
 		}
 	}
 	

+ 15 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/PcInventory.java

@@ -192,6 +192,21 @@ public class PcInventory extends Inventory
 
 		return list.toArray(new L2ItemInstance[list.size()]);
 	}
+	
+	/** 
+	 * Get all element items 
+	 * @return 
+	 */ 
+	public L2ItemInstance[] getElementItems() 
+	{
+		List<L2ItemInstance> list = new FastList<L2ItemInstance>(); 
+		for (L2ItemInstance item : _items) 
+		{
+		if (item != null && item.getElementals() != null) 
+			list.add(item); 
+		}
+		return list.toArray(new L2ItemInstance[list.size()]); 
+	} 
 
 	/**
 	 * Returns the list of items in inventory available for transaction adjusted by tradeList

+ 3 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java

@@ -873,6 +873,9 @@ public final class L2GamePacketHandler extends TCPHeaderHandler<L2GameClient> im
 		                    case 0x58:
 		                    	// TODO: implement me (just disabling warnings for this packet)
 		                    	break;
+		                    case 0x23: 
+		                     	msg = new RequestExRemoveItemAttribute(); 
+		                     	break; 
 		                    default: 
 		                     	this.printDebugDoubleOpcode(opcode, id2, buf, state, client);
 		                    	break;

+ 92 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExRemoveItemAttribute.java

@@ -0,0 +1,92 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+import net.sf.l2j.gameserver.model.L2ItemInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.network.SystemMessageId;
+import net.sf.l2j.gameserver.network.serverpackets.ExShowBaseAttributeCancelWindow;
+import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
+import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
+
+public class RequestExRemoveItemAttribute extends L2GameClientPacket
+{
+	private static String _C__D0_23_REQUESTEXREMOVEITEMATTRIBUTE = "[C] D0:23 RequestExRemoveItemAttribute";
+
+	private int _objectId;
+
+	public RequestExRemoveItemAttribute()
+	{
+	}
+
+	@Override
+	public void readImpl()
+	{
+		_objectId = readD();
+	}
+
+	@Override
+	public void runImpl()
+	{
+		L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+			return;
+
+		L2ItemInstance targetItem = activeChar.getInventory().getItemByObjectId(_objectId);
+
+		if (targetItem == null)
+			return;
+
+		if (targetItem.getElementals() == null)
+			return;
+
+		if (activeChar.getInventory().getAdena() < 50000)
+		{
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA));
+			return;
+		}
+		else
+		{
+			activeChar.reduceAdena("RemoveElement", 50000, activeChar, true);
+			targetItem.clearElementAttr();
+			InventoryUpdate iu = new InventoryUpdate();
+			iu.addModifiedItem(targetItem);
+			activeChar.sendPacket(iu);
+			SystemMessage sm;
+			if (targetItem.getEnchantLevel() > 0)
+			{
+				sm = new SystemMessage(SystemMessageId.S1_S2_ELEMENTAL_POWER_REMOVED);
+				sm.addNumber(targetItem.getEnchantLevel());
+				sm.addItemName(targetItem);
+			}
+			else
+			{
+				sm = new SystemMessage(SystemMessageId.S1_ELEMENTAL_POWER_REMOVED);
+				sm.addItemName(targetItem);
+			}
+			activeChar.sendPacket(sm);
+			activeChar.getInventory().reloadEquippedItems();
+			activeChar.broadcastUserInfo();
+			activeChar.sendPacket(new ExShowBaseAttributeCancelWindow(activeChar));
+			return;
+		}
+	}
+
+	@Override
+	public String getType()
+	{
+		return _C__D0_23_REQUESTEXREMOVEITEMATTRIBUTE;
+	}
+}

+ 49 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/serverpackets/ExShowBaseAttributeCancelWindow.java

@@ -0,0 +1,49 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.serverpackets;
+
+import net.sf.l2j.gameserver.model.L2ItemInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+public class ExShowBaseAttributeCancelWindow extends L2GameServerPacket
+{
+	private static final String		_S__FE_74_EXCSHOWBASEATTRIBUTECANCELWINDOW = "[S] FE:74 ExShowBaseAttributeCancelWindow";
+
+	private L2ItemInstance[]		_items;
+
+	public ExShowBaseAttributeCancelWindow(L2PcInstance player)
+	{
+		_items = player.getInventory().getElementItems();
+	}
+
+	@Override
+	protected void writeImpl()
+	{
+		writeC(0xfe);
+		writeH(0x74);
+		writeD(_items.length);
+		for (L2ItemInstance item : _items)
+		{
+			writeD(item.getObjectId());
+			writeD(50000);
+		}
+	}
+
+	@Override
+	public String getType()
+	{
+		return _S__FE_74_EXCSHOWBASEATTRIBUTECANCELWINDOW;
+	}
+}