Support for multisell maintain ingredient.
This commit is contained in:
@@ -20,8 +20,9 @@
|
||||
<xs:element name="ingredient" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="id" type="xs:integer" use="required" />
|
||||
<xs:attribute name="enchantmentLevel" type="xs:integer" />
|
||||
<xs:attribute name="count" type="xs:positiveInteger" use="required" />
|
||||
<xs:attribute name="enchantmentLevel" type="xs:integer" />
|
||||
<xs:attribute name="maintainIngredient" type="xs:boolean" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="production" minOccurs="1" maxOccurs="unbounded">
|
||||
|
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
|
||||
final int id = parseInteger(d.getAttributes(), "id");
|
||||
final long count = parseLong(d.getAttributes(), "count");
|
||||
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
|
||||
final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
|
||||
final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
|
||||
final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
|
||||
|
||||
if (itemExists(ingredient))
|
||||
{
|
||||
|
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
|
||||
{
|
||||
private final double _chance;
|
||||
private final byte _enchantmentLevel;
|
||||
private final boolean _maintainIngredient;
|
||||
|
||||
public ItemChanceHolder(int id, double chance)
|
||||
{
|
||||
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
|
||||
super(id, count);
|
||||
_chance = chance;
|
||||
_enchantmentLevel = 0;
|
||||
_maintainIngredient = false;
|
||||
}
|
||||
|
||||
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
|
||||
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
|
||||
super(id, count);
|
||||
_chance = chance;
|
||||
_enchantmentLevel = enchantmentLevel;
|
||||
_maintainIngredient = false;
|
||||
}
|
||||
|
||||
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
|
||||
{
|
||||
super(id, count);
|
||||
_chance = chance;
|
||||
_enchantmentLevel = enchantmentLevel;
|
||||
_maintainIngredient = maintainIngredient;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
|
||||
return _enchantmentLevel;
|
||||
}
|
||||
|
||||
public boolean isMaintainIngredient()
|
||||
{
|
||||
return _maintainIngredient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
|
||||
* @param holders list of holders to calculate chance from.
|
||||
|
@@ -316,6 +316,11 @@ public class MultiSellChoose implements IClientIncomingPacket
|
||||
// Take all ingredients
|
||||
for (ItemChanceHolder ingredient : entry.getIngredients())
|
||||
{
|
||||
if (ingredient.isMaintainIngredient())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
|
||||
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
|
||||
if (specialItem != null)
|
||||
|
Reference in New Issue
Block a user