Improved alchemy conversion packet.

This commit is contained in:
MobiusDevelopment 2019-03-17 00:15:26 +00:00
parent 686d068dc4
commit 7d4c482eb4
7 changed files with 210 additions and 259 deletions

View File

@ -16,9 +16,6 @@
*/ */
package com.l2jmobius.gameserver.network.clientpackets.alchemy; package com.l2jmobius.gameserver.network.clientpackets.alchemy;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData;
@ -43,22 +40,20 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
private int _craftTimes; private int _craftTimes;
private int _skillId; private int _skillId;
private int _skillLevel; private int _skillLevel;
// private final Set<ItemHolder> _ingredients = new HashSet<>();
private final Set<ItemHolder> _ingredients = new HashSet<>();
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_craftTimes = packet.readD(); _craftTimes = packet.readD();
packet.readH(); // TODO: Find me packet.readH();
_skillId = packet.readD(); _skillId = packet.readD();
_skillLevel = packet.readD(); _skillLevel = packet.readD();
// final int ingredientsSize = packet.readD();
final int ingredientsSize = packet.readD(); // for (int i = 0; i < ingredientsSize; i++)
for (int i = 0; i < ingredientsSize; i++) // {
{ // _ingredients.add(new ItemHolder(packet.readD(), packet.readQ()));
_ingredients.add(new ItemHolder(packet.readD(), packet.readQ())); // }
}
return true; return true;
} }
@ -99,14 +94,13 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
return; return;
} }
// TODO : Implement this
// if (!_ingredients.equals(data.getIngredients())) // if (!_ingredients.equals(data.getIngredients()))
// { // {
// LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player); // LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player);
// return; // return;
// } // }
// TODO: Figure out the chance // Chance based on grade.
final int baseChance; final int baseChance;
switch (data.getGrade()) switch (data.getGrade())
{ {
@ -132,30 +126,11 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
// Calculate success and failure count.
int successCount = 0; int successCount = 0;
int failureCount = 0; int failureCount = 0;
for (int i = 0; i < _craftTimes; i++)
// Run _craftItems iteration of item craft
final InventoryUpdate ui = new InventoryUpdate();
CRAFTLOOP: for (int i = 0; i < _craftTimes; i++)
{ {
// for each tries, check if player have enough items and destroy
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
if (item == null)
{
break CRAFTLOOP;
}
if (item.getCount() < ingredient.getCount())
{
break CRAFTLOOP;
}
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount(), player, null);
ui.addItem(item);
}
if (Rnd.get(100) < baseChance) if (Rnd.get(100) < baseChance)
{ {
successCount++; successCount++;
@ -166,12 +141,31 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
for (ItemHolder ingredient : data.getIngredients())
{
if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes))
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS);
return;
}
}
final InventoryUpdate ui = new InventoryUpdate();
// Destroy ingredients.
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
ui.addItem(item);
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount() * _craftTimes, player, null);
}
// Add success items.
if (successCount > 0) if (successCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null);
ui.addItem(item); ui.addItem(item);
} }
// Add failed items.
if (failureCount > 0) if (failureCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
@ -180,6 +174,5 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
player.sendPacket(new ExAlchemyConversion(successCount, failureCount)); player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
player.sendInventoryUpdate(ui); player.sendInventoryUpdate(ui);
} }
} }

View File

@ -16,9 +16,6 @@
*/ */
package com.l2jmobius.gameserver.network.clientpackets.alchemy; package com.l2jmobius.gameserver.network.clientpackets.alchemy;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData;
@ -43,22 +40,20 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
private int _craftTimes; private int _craftTimes;
private int _skillId; private int _skillId;
private int _skillLevel; private int _skillLevel;
// private final Set<ItemHolder> _ingredients = new HashSet<>();
private final Set<ItemHolder> _ingredients = new HashSet<>();
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_craftTimes = packet.readD(); _craftTimes = packet.readD();
packet.readH(); // TODO: Find me packet.readH();
_skillId = packet.readD(); _skillId = packet.readD();
_skillLevel = packet.readD(); _skillLevel = packet.readD();
// final int ingredientsSize = packet.readD();
final int ingredientsSize = packet.readD(); // for (int i = 0; i < ingredientsSize; i++)
for (int i = 0; i < ingredientsSize; i++) // {
{ // _ingredients.add(new ItemHolder(packet.readD(), packet.readQ()));
_ingredients.add(new ItemHolder(packet.readD(), packet.readQ())); // }
}
return true; return true;
} }
@ -99,14 +94,13 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
return; return;
} }
// TODO : Implement this
// if (!_ingredients.equals(data.getIngredients())) // if (!_ingredients.equals(data.getIngredients()))
// { // {
// LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player); // LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player);
// return; // return;
// } // }
// TODO: Figure out the chance // Chance based on grade.
final int baseChance; final int baseChance;
switch (data.getGrade()) switch (data.getGrade())
{ {
@ -132,30 +126,11 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
// Calculate success and failure count.
int successCount = 0; int successCount = 0;
int failureCount = 0; int failureCount = 0;
for (int i = 0; i < _craftTimes; i++)
// Run _craftItems iteration of item craft
final InventoryUpdate ui = new InventoryUpdate();
CRAFTLOOP: for (int i = 0; i < _craftTimes; i++)
{ {
// for each tries, check if player have enough items and destroy
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
if (item == null)
{
break CRAFTLOOP;
}
if (item.getCount() < ingredient.getCount())
{
break CRAFTLOOP;
}
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount(), player, null);
ui.addItem(item);
}
if (Rnd.get(100) < baseChance) if (Rnd.get(100) < baseChance)
{ {
successCount++; successCount++;
@ -166,12 +141,31 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
for (ItemHolder ingredient : data.getIngredients())
{
if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes))
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS);
return;
}
}
final InventoryUpdate ui = new InventoryUpdate();
// Destroy ingredients.
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
ui.addItem(item);
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount() * _craftTimes, player, null);
}
// Add success items.
if (successCount > 0) if (successCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null);
ui.addItem(item); ui.addItem(item);
} }
// Add failed items.
if (failureCount > 0) if (failureCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
@ -180,6 +174,5 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
player.sendPacket(new ExAlchemyConversion(successCount, failureCount)); player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
player.sendInventoryUpdate(ui); player.sendInventoryUpdate(ui);
} }
} }

View File

@ -16,9 +16,6 @@
*/ */
package com.l2jmobius.gameserver.network.clientpackets.alchemy; package com.l2jmobius.gameserver.network.clientpackets.alchemy;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData;
@ -43,22 +40,20 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
private int _craftTimes; private int _craftTimes;
private int _skillId; private int _skillId;
private int _skillLevel; private int _skillLevel;
// private final Set<ItemHolder> _ingredients = new HashSet<>();
private final Set<ItemHolder> _ingredients = new HashSet<>();
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_craftTimes = packet.readD(); _craftTimes = packet.readD();
packet.readH(); // TODO: Find me packet.readH();
_skillId = packet.readD(); _skillId = packet.readD();
_skillLevel = packet.readD(); _skillLevel = packet.readD();
// final int ingredientsSize = packet.readD();
final int ingredientsSize = packet.readD(); // for (int i = 0; i < ingredientsSize; i++)
for (int i = 0; i < ingredientsSize; i++) // {
{ // _ingredients.add(new ItemHolder(packet.readD(), packet.readQ()));
_ingredients.add(new ItemHolder(packet.readD(), packet.readQ())); // }
}
return true; return true;
} }
@ -99,14 +94,13 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
return; return;
} }
// TODO : Implement this
// if (!_ingredients.equals(data.getIngredients())) // if (!_ingredients.equals(data.getIngredients()))
// { // {
// LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player); // LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player);
// return; // return;
// } // }
// TODO: Figure out the chance // Chance based on grade.
final int baseChance; final int baseChance;
switch (data.getGrade()) switch (data.getGrade())
{ {
@ -132,30 +126,11 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
// Calculate success and failure count.
int successCount = 0; int successCount = 0;
int failureCount = 0; int failureCount = 0;
for (int i = 0; i < _craftTimes; i++)
// Run _craftItems iteration of item craft
final InventoryUpdate ui = new InventoryUpdate();
CRAFTLOOP: for (int i = 0; i < _craftTimes; i++)
{ {
// for each tries, check if player have enough items and destroy
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
if (item == null)
{
break CRAFTLOOP;
}
if (item.getCount() < ingredient.getCount())
{
break CRAFTLOOP;
}
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount(), player, null);
ui.addItem(item);
}
if (Rnd.get(100) < baseChance) if (Rnd.get(100) < baseChance)
{ {
successCount++; successCount++;
@ -166,12 +141,31 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
for (ItemHolder ingredient : data.getIngredients())
{
if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes))
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS);
return;
}
}
final InventoryUpdate ui = new InventoryUpdate();
// Destroy ingredients.
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
ui.addItem(item);
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount() * _craftTimes, player, null);
}
// Add success items.
if (successCount > 0) if (successCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null);
ui.addItem(item); ui.addItem(item);
} }
// Add failed items.
if (failureCount > 0) if (failureCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
@ -180,6 +174,5 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
player.sendPacket(new ExAlchemyConversion(successCount, failureCount)); player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
player.sendInventoryUpdate(ui); player.sendInventoryUpdate(ui);
} }
} }

View File

@ -16,9 +16,6 @@
*/ */
package com.l2jmobius.gameserver.network.clientpackets.alchemy; package com.l2jmobius.gameserver.network.clientpackets.alchemy;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData;
@ -43,22 +40,20 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
private int _craftTimes; private int _craftTimes;
private int _skillId; private int _skillId;
private int _skillLevel; private int _skillLevel;
// private final Set<ItemHolder> _ingredients = new HashSet<>();
private final Set<ItemHolder> _ingredients = new HashSet<>();
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_craftTimes = packet.readD(); _craftTimes = packet.readD();
packet.readH(); // TODO: Find me packet.readH();
_skillId = packet.readD(); _skillId = packet.readD();
_skillLevel = packet.readD(); _skillLevel = packet.readD();
// final int ingredientsSize = packet.readD();
final int ingredientsSize = packet.readD(); // for (int i = 0; i < ingredientsSize; i++)
for (int i = 0; i < ingredientsSize; i++) // {
{ // _ingredients.add(new ItemHolder(packet.readD(), packet.readQ()));
_ingredients.add(new ItemHolder(packet.readD(), packet.readQ())); // }
}
return true; return true;
} }
@ -99,14 +94,13 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
return; return;
} }
// TODO : Implement this
// if (!_ingredients.equals(data.getIngredients())) // if (!_ingredients.equals(data.getIngredients()))
// { // {
// LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player); // LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player);
// return; // return;
// } // }
// TODO: Figure out the chance // Chance based on grade.
final int baseChance; final int baseChance;
switch (data.getGrade()) switch (data.getGrade())
{ {
@ -132,30 +126,11 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
// Calculate success and failure count.
int successCount = 0; int successCount = 0;
int failureCount = 0; int failureCount = 0;
for (int i = 0; i < _craftTimes; i++)
// Run _craftItems iteration of item craft
final InventoryUpdate ui = new InventoryUpdate();
CRAFTLOOP: for (int i = 0; i < _craftTimes; i++)
{ {
// for each tries, check if player have enough items and destroy
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
if (item == null)
{
break CRAFTLOOP;
}
if (item.getCount() < ingredient.getCount())
{
break CRAFTLOOP;
}
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount(), player, null);
ui.addItem(item);
}
if (Rnd.get(100) < baseChance) if (Rnd.get(100) < baseChance)
{ {
successCount++; successCount++;
@ -166,12 +141,31 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
for (ItemHolder ingredient : data.getIngredients())
{
if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes))
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS);
return;
}
}
final InventoryUpdate ui = new InventoryUpdate();
// Destroy ingredients.
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
ui.addItem(item);
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount() * _craftTimes, player, null);
}
// Add success items.
if (successCount > 0) if (successCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null);
ui.addItem(item); ui.addItem(item);
} }
// Add failed items.
if (failureCount > 0) if (failureCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
@ -180,6 +174,5 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
player.sendPacket(new ExAlchemyConversion(successCount, failureCount)); player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
player.sendInventoryUpdate(ui); player.sendInventoryUpdate(ui);
} }
} }

View File

@ -16,9 +16,6 @@
*/ */
package com.l2jmobius.gameserver.network.clientpackets.alchemy; package com.l2jmobius.gameserver.network.clientpackets.alchemy;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData;
@ -43,22 +40,20 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
private int _craftTimes; private int _craftTimes;
private int _skillId; private int _skillId;
private int _skillLevel; private int _skillLevel;
// private final Set<ItemHolder> _ingredients = new HashSet<>();
private final Set<ItemHolder> _ingredients = new HashSet<>();
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_craftTimes = packet.readD(); _craftTimes = packet.readD();
packet.readH(); // TODO: Find me packet.readH();
_skillId = packet.readD(); _skillId = packet.readD();
_skillLevel = packet.readD(); _skillLevel = packet.readD();
// final int ingredientsSize = packet.readD();
final int ingredientsSize = packet.readD(); // for (int i = 0; i < ingredientsSize; i++)
for (int i = 0; i < ingredientsSize; i++) // {
{ // _ingredients.add(new ItemHolder(packet.readD(), packet.readQ()));
_ingredients.add(new ItemHolder(packet.readD(), packet.readQ())); // }
}
return true; return true;
} }
@ -99,14 +94,13 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
return; return;
} }
// TODO : Implement this
// if (!_ingredients.equals(data.getIngredients())) // if (!_ingredients.equals(data.getIngredients()))
// { // {
// LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player); // LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player);
// return; // return;
// } // }
// TODO: Figure out the chance // Chance based on grade.
final int baseChance; final int baseChance;
switch (data.getGrade()) switch (data.getGrade())
{ {
@ -132,30 +126,11 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
// Calculate success and failure count.
int successCount = 0; int successCount = 0;
int failureCount = 0; int failureCount = 0;
for (int i = 0; i < _craftTimes; i++)
// Run _craftItems iteration of item craft
final InventoryUpdate ui = new InventoryUpdate();
CRAFTLOOP: for (int i = 0; i < _craftTimes; i++)
{ {
// for each tries, check if player have enough items and destroy
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
if (item == null)
{
break CRAFTLOOP;
}
if (item.getCount() < ingredient.getCount())
{
break CRAFTLOOP;
}
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount(), player, null);
ui.addItem(item);
}
if (Rnd.get(100) < baseChance) if (Rnd.get(100) < baseChance)
{ {
successCount++; successCount++;
@ -166,12 +141,31 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
for (ItemHolder ingredient : data.getIngredients())
{
if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes))
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS);
return;
}
}
final InventoryUpdate ui = new InventoryUpdate();
// Destroy ingredients.
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
ui.addItem(item);
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount() * _craftTimes, player, null);
}
// Add success items.
if (successCount > 0) if (successCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null);
ui.addItem(item); ui.addItem(item);
} }
// Add failed items.
if (failureCount > 0) if (failureCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
@ -180,6 +174,5 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
player.sendPacket(new ExAlchemyConversion(successCount, failureCount)); player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
player.sendInventoryUpdate(ui); player.sendInventoryUpdate(ui);
} }
} }

View File

@ -16,9 +16,6 @@
*/ */
package com.l2jmobius.gameserver.network.clientpackets.alchemy; package com.l2jmobius.gameserver.network.clientpackets.alchemy;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData;
@ -43,22 +40,20 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
private int _craftTimes; private int _craftTimes;
private int _skillId; private int _skillId;
private int _skillLevel; private int _skillLevel;
// private final Set<ItemHolder> _ingredients = new HashSet<>();
private final Set<ItemHolder> _ingredients = new HashSet<>();
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_craftTimes = packet.readD(); _craftTimes = packet.readD();
packet.readH(); // TODO: Find me packet.readH();
_skillId = packet.readD(); _skillId = packet.readD();
_skillLevel = packet.readD(); _skillLevel = packet.readD();
// final int ingredientsSize = packet.readD();
final int ingredientsSize = packet.readD(); // for (int i = 0; i < ingredientsSize; i++)
for (int i = 0; i < ingredientsSize; i++) // {
{ // _ingredients.add(new ItemHolder(packet.readD(), packet.readQ()));
_ingredients.add(new ItemHolder(packet.readD(), packet.readQ())); // }
}
return true; return true;
} }
@ -99,14 +94,13 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
return; return;
} }
// TODO : Implement this
// if (!_ingredients.equals(data.getIngredients())) // if (!_ingredients.equals(data.getIngredients()))
// { // {
// LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player); // LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player);
// return; // return;
// } // }
// TODO: Figure out the chance // Chance based on grade.
final int baseChance; final int baseChance;
switch (data.getGrade()) switch (data.getGrade())
{ {
@ -132,30 +126,11 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
// Calculate success and failure count.
int successCount = 0; int successCount = 0;
int failureCount = 0; int failureCount = 0;
for (int i = 0; i < _craftTimes; i++)
// Run _craftItems iteration of item craft
final InventoryUpdate ui = new InventoryUpdate();
CRAFTLOOP: for (int i = 0; i < _craftTimes; i++)
{ {
// for each tries, check if player have enough items and destroy
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
if (item == null)
{
break CRAFTLOOP;
}
if (item.getCount() < ingredient.getCount())
{
break CRAFTLOOP;
}
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount(), player, null);
ui.addItem(item);
}
if (Rnd.get(100) < baseChance) if (Rnd.get(100) < baseChance)
{ {
successCount++; successCount++;
@ -166,12 +141,31 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
for (ItemHolder ingredient : data.getIngredients())
{
if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes))
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS);
return;
}
}
final InventoryUpdate ui = new InventoryUpdate();
// Destroy ingredients.
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
ui.addItem(item);
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount() * _craftTimes, player, null);
}
// Add success items.
if (successCount > 0) if (successCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null);
ui.addItem(item); ui.addItem(item);
} }
// Add failed items.
if (failureCount > 0) if (failureCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
@ -180,6 +174,5 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
player.sendPacket(new ExAlchemyConversion(successCount, failureCount)); player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
player.sendInventoryUpdate(ui); player.sendInventoryUpdate(ui);
} }
} }

View File

@ -16,9 +16,6 @@
*/ */
package com.l2jmobius.gameserver.network.clientpackets.alchemy; package com.l2jmobius.gameserver.network.clientpackets.alchemy;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData;
@ -43,22 +40,20 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
private int _craftTimes; private int _craftTimes;
private int _skillId; private int _skillId;
private int _skillLevel; private int _skillLevel;
// private final Set<ItemHolder> _ingredients = new HashSet<>();
private final Set<ItemHolder> _ingredients = new HashSet<>();
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_craftTimes = packet.readD(); _craftTimes = packet.readD();
packet.readH(); // TODO: Find me packet.readH();
_skillId = packet.readD(); _skillId = packet.readD();
_skillLevel = packet.readD(); _skillLevel = packet.readD();
// final int ingredientsSize = packet.readD();
final int ingredientsSize = packet.readD(); // for (int i = 0; i < ingredientsSize; i++)
for (int i = 0; i < ingredientsSize; i++) // {
{ // _ingredients.add(new ItemHolder(packet.readD(), packet.readQ()));
_ingredients.add(new ItemHolder(packet.readD(), packet.readQ())); // }
}
return true; return true;
} }
@ -99,14 +94,13 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
return; return;
} }
// TODO : Implement this
// if (!_ingredients.equals(data.getIngredients())) // if (!_ingredients.equals(data.getIngredients()))
// { // {
// LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player); // LOGGER.warning("Client ingredients are not same as server ingredients for alchemy conversion player: "+ +"", player);
// return; // return;
// } // }
// TODO: Figure out the chance // Chance based on grade.
final int baseChance; final int baseChance;
switch (data.getGrade()) switch (data.getGrade())
{ {
@ -132,30 +126,11 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
// Calculate success and failure count.
int successCount = 0; int successCount = 0;
int failureCount = 0; int failureCount = 0;
for (int i = 0; i < _craftTimes; i++)
// Run _craftItems iteration of item craft
final InventoryUpdate ui = new InventoryUpdate();
CRAFTLOOP: for (int i = 0; i < _craftTimes; i++)
{ {
// for each tries, check if player have enough items and destroy
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
if (item == null)
{
break CRAFTLOOP;
}
if (item.getCount() < ingredient.getCount())
{
break CRAFTLOOP;
}
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount(), player, null);
ui.addItem(item);
}
if (Rnd.get(100) < baseChance) if (Rnd.get(100) < baseChance)
{ {
successCount++; successCount++;
@ -166,12 +141,31 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
} }
} }
for (ItemHolder ingredient : data.getIngredients())
{
if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes))
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS);
return;
}
}
final InventoryUpdate ui = new InventoryUpdate();
// Destroy ingredients.
for (ItemHolder ingredient : data.getIngredients())
{
final L2ItemInstance item = player.getInventory().getItemByItemId(ingredient.getId());
ui.addItem(item);
player.getInventory().destroyItem("Alchemy", item, ingredient.getCount() * _craftTimes, player, null);
}
// Add success items.
if (successCount > 0) if (successCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionSuccess().getId(), data.getProductionSuccess().getCount() * successCount, player, null);
ui.addItem(item); ui.addItem(item);
} }
// Add failed items.
if (failureCount > 0) if (failureCount > 0)
{ {
final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null); final L2ItemInstance item = player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
@ -180,6 +174,5 @@ public class RequestAlchemyConversion implements IClientIncomingPacket
player.sendPacket(new ExAlchemyConversion(successCount, failureCount)); player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
player.sendInventoryUpdate(ui); player.sendInventoryUpdate(ui);
} }
} }