RequestCollectionRegister should not take only one item.

This commit is contained in:
MobiusDevelopment
2021-06-04 22:49:40 +00:00
parent bbd841b0f4
commit 91d336f712
2 changed files with 56 additions and 8 deletions

View File

@@ -19,6 +19,8 @@ package org.l2jmobius.gameserver.network.clientpackets.collection;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.data.xml.CollectionData; import org.l2jmobius.gameserver.data.xml.CollectionData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.CollectionDataHolder;
import org.l2jmobius.gameserver.model.holders.ItemCollectionData;
import org.l2jmobius.gameserver.model.holders.PlayerCollectionData; import org.l2jmobius.gameserver.model.holders.PlayerCollectionData;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -27,7 +29,7 @@ import org.l2jmobius.gameserver.network.serverpackets.collection.ExCollectionCom
import org.l2jmobius.gameserver.network.serverpackets.collection.ExCollectionRegister; import org.l2jmobius.gameserver.network.serverpackets.collection.ExCollectionRegister;
/** /**
* Written by Berezkin Nikolay, on 12.04.2021 * @author Berezkin Nikolay, Mobius
*/ */
public class RequestCollectionRegister implements IClientIncomingPacket public class RequestCollectionRegister implements IClientIncomingPacket
{ {
@@ -52,21 +54,43 @@ public class RequestCollectionRegister implements IClientIncomingPacket
{ {
return; return;
} }
final ItemInstance item = player.getInventory().getItemByObjectId(_itemObjId);
final ItemInstance item = player.getInventory().getItemByObjectId(_itemObjId);
if (item == null) if (item == null)
{ {
player.sendMessage("Item not found."); player.sendMessage("Item not found.");
return; return;
} }
player.destroyItemByItemId("Collection", item.getId(), 1, player, true); final CollectionDataHolder collection = CollectionData.getInstance().getCollection(_collectionId);
if (collection == null)
{
player.sendMessage("Could not find collection.");
return;
}
long count = 0;
for (ItemCollectionData data : collection.getItems())
{
if ((data.getItemId() == item.getId()) && ((data.getEnchantLevel() == 0) || (data.getEnchantLevel() == item.getEnchantLevel())))
{
count = data.getCount();
break;
}
}
if ((count == 0) || (item.getCount() < count))
{
player.sendMessage("Incorrect item count.");
return;
}
player.destroyItemByItemId("Collection", item.getId(), count, player, true);
player.sendPacket(new ExCollectionRegister(_collectionId, _index, item)); player.sendPacket(new ExCollectionRegister(_collectionId, _index, item));
player.getCollections().add(new PlayerCollectionData(_collectionId, item.getId(), _index)); player.getCollections().add(new PlayerCollectionData(_collectionId, item.getId(), _index));
if (CollectionData.getInstance().getCollection(_collectionId).getItems().size() == player.getCollections().stream().filter(it -> it.getCollectionId() == _collectionId).count()) if (collection.getItems().size() == player.getCollections().stream().filter(it -> it.getCollectionId() == _collectionId).count())
{ {
player.sendPacket(new ExCollectionComplete(_collectionId)); player.sendPacket(new ExCollectionComplete(_collectionId));
} }

View File

@@ -19,6 +19,8 @@ package org.l2jmobius.gameserver.network.clientpackets.collection;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.data.xml.CollectionData; import org.l2jmobius.gameserver.data.xml.CollectionData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.CollectionDataHolder;
import org.l2jmobius.gameserver.model.holders.ItemCollectionData;
import org.l2jmobius.gameserver.model.holders.PlayerCollectionData; import org.l2jmobius.gameserver.model.holders.PlayerCollectionData;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -27,7 +29,7 @@ import org.l2jmobius.gameserver.network.serverpackets.collection.ExCollectionCom
import org.l2jmobius.gameserver.network.serverpackets.collection.ExCollectionRegister; import org.l2jmobius.gameserver.network.serverpackets.collection.ExCollectionRegister;
/** /**
* Written by Berezkin Nikolay, on 12.04.2021 * @author Berezkin Nikolay, Mobius
*/ */
public class RequestCollectionRegister implements IClientIncomingPacket public class RequestCollectionRegister implements IClientIncomingPacket
{ {
@@ -52,21 +54,43 @@ public class RequestCollectionRegister implements IClientIncomingPacket
{ {
return; return;
} }
final ItemInstance item = player.getInventory().getItemByObjectId(_itemObjId);
final ItemInstance item = player.getInventory().getItemByObjectId(_itemObjId);
if (item == null) if (item == null)
{ {
player.sendMessage("Item not found."); player.sendMessage("Item not found.");
return; return;
} }
player.destroyItemByItemId("Collection", item.getId(), 1, player, true); final CollectionDataHolder collection = CollectionData.getInstance().getCollection(_collectionId);
if (collection == null)
{
player.sendMessage("Could not find collection.");
return;
}
long count = 0;
for (ItemCollectionData data : collection.getItems())
{
if ((data.getItemId() == item.getId()) && ((data.getEnchantLevel() == 0) || (data.getEnchantLevel() == item.getEnchantLevel())))
{
count = data.getCount();
break;
}
}
if ((count == 0) || (item.getCount() < count))
{
player.sendMessage("Incorrect item count.");
return;
}
player.destroyItemByItemId("Collection", item.getId(), count, player, true);
player.sendPacket(new ExCollectionRegister(_collectionId, _index, item)); player.sendPacket(new ExCollectionRegister(_collectionId, _index, item));
player.getCollections().add(new PlayerCollectionData(_collectionId, item.getId(), _index)); player.getCollections().add(new PlayerCollectionData(_collectionId, item.getId(), _index));
if (CollectionData.getInstance().getCollection(_collectionId).getItems().size() == player.getCollections().stream().filter(it -> it.getCollectionId() == _collectionId).count()) if (collection.getItems().size() == player.getCollections().stream().filter(it -> it.getCollectionId() == _collectionId).count())
{ {
player.sendPacket(new ExCollectionComplete(_collectionId)); player.sendPacket(new ExCollectionComplete(_collectionId));
} }