Support for minimum and maximum extractable item count.
This commit is contained in:
@@ -63,10 +63,78 @@ public class ExtractableItems implements IItemHandler
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean created = false;
|
List<L2ItemInstance> extractedItems = new ArrayList<>();
|
||||||
List<L2ItemInstance> enchantedItems = new ArrayList<>();
|
List<L2ItemInstance> enchantedItems = new ArrayList<>();
|
||||||
|
if (etcitem.getExtractableCountMin() > 0)
|
||||||
|
{
|
||||||
|
while (extractedItems.size() < etcitem.getExtractableCountMin())
|
||||||
|
{
|
||||||
for (L2ExtractableProduct expi : exitem)
|
for (L2ExtractableProduct expi : exitem)
|
||||||
{
|
{
|
||||||
|
if ((etcitem.getExtractableCountMax() > 0) && (extractedItems.size() == etcitem.getExtractableCountMax()))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Rnd.get(100000) <= expi.getChance())
|
||||||
|
{
|
||||||
|
final int min = (int) (expi.getMin() * Config.RATE_EXTRACTABLE);
|
||||||
|
final int max = (int) (expi.getMax() * Config.RATE_EXTRACTABLE);
|
||||||
|
|
||||||
|
int createItemAmount = (max == min) ? min : (Rnd.get((max - min) + 1) + min);
|
||||||
|
if (createItemAmount == 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not extract the same item.
|
||||||
|
for (L2ItemInstance i : extractedItems)
|
||||||
|
{
|
||||||
|
if (i.getItem().getId() == expi.getId())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.isStackable() || (createItemAmount == 1))
|
||||||
|
{
|
||||||
|
final L2ItemInstance newItem = activeChar.addItem("Extract", expi.getId(), createItemAmount, activeChar, false);
|
||||||
|
if (expi.getMaxEnchant() > 0)
|
||||||
|
{
|
||||||
|
newItem.setEnchantLevel(Rnd.get(expi.getMinEnchant(), expi.getMaxEnchant()));
|
||||||
|
enchantedItems.add(newItem);
|
||||||
|
}
|
||||||
|
extractedItems.add(newItem);
|
||||||
|
sendMessage(activeChar, newItem);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (createItemAmount > 0)
|
||||||
|
{
|
||||||
|
final L2ItemInstance newItem = activeChar.addItem("Extract", expi.getId(), 1, activeChar, false);
|
||||||
|
if (expi.getMaxEnchant() > 0)
|
||||||
|
{
|
||||||
|
newItem.setEnchantLevel(Rnd.get(expi.getMinEnchant(), expi.getMaxEnchant()));
|
||||||
|
enchantedItems.add(newItem);
|
||||||
|
}
|
||||||
|
extractedItems.add(newItem);
|
||||||
|
sendMessage(activeChar, newItem);
|
||||||
|
createItemAmount--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (L2ExtractableProduct expi : exitem)
|
||||||
|
{
|
||||||
|
if ((etcitem.getExtractableCountMax() > 0) && (extractedItems.size() == etcitem.getExtractableCountMax()))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (Rnd.get(100000) <= expi.getChance())
|
if (Rnd.get(100000) <= expi.getChance())
|
||||||
{
|
{
|
||||||
final int min = (int) (expi.getMin() * Config.RATE_EXTRACTABLE);
|
final int min = (int) (expi.getMin() * Config.RATE_EXTRACTABLE);
|
||||||
@@ -86,6 +154,7 @@ public class ExtractableItems implements IItemHandler
|
|||||||
newItem.setEnchantLevel(Rnd.get(expi.getMinEnchant(), expi.getMaxEnchant()));
|
newItem.setEnchantLevel(Rnd.get(expi.getMinEnchant(), expi.getMaxEnchant()));
|
||||||
enchantedItems.add(newItem);
|
enchantedItems.add(newItem);
|
||||||
}
|
}
|
||||||
|
extractedItems.add(newItem);
|
||||||
sendMessage(activeChar, newItem);
|
sendMessage(activeChar, newItem);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -98,16 +167,16 @@ public class ExtractableItems implements IItemHandler
|
|||||||
newItem.setEnchantLevel(Rnd.get(expi.getMinEnchant(), expi.getMaxEnchant()));
|
newItem.setEnchantLevel(Rnd.get(expi.getMinEnchant(), expi.getMaxEnchant()));
|
||||||
enchantedItems.add(newItem);
|
enchantedItems.add(newItem);
|
||||||
}
|
}
|
||||||
|
extractedItems.add(newItem);
|
||||||
sendMessage(activeChar, newItem);
|
sendMessage(activeChar, newItem);
|
||||||
createItemAmount--;
|
createItemAmount--;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
created = true;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!created)
|
if (extractedItems.size() == 0)
|
||||||
{
|
{
|
||||||
activeChar.sendPacket(SystemMessageId.THERE_WAS_NOTHING_FOUND_INSIDE);
|
activeChar.sendPacket(SystemMessageId.THERE_WAS_NOTHING_FOUND_INSIDE);
|
||||||
}
|
}
|
||||||
|
12
trunk/dist/game/data/stats/items/34900-34999.xml
vendored
12
trunk/dist/game/data/stats/items/34900-34999.xml
vendored
@@ -405,6 +405,8 @@
|
|||||||
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
||||||
<set name="capsuled_items" val="19448,1,1,0.9666;19447,1,1,0.3666;18552,1,1,5.16666;18551,1,1,5.16666;9555,1,1,7.16666;9553,1,1,7.16666;9554,1,1,7.16666;9552,1,1,7.16666;9557,1,1,7.16666;9556,1,1,7.16666;9549,1,1,21.33333;9547,1,1,21.33333;9548,1,1,21.33333;9546,1,1,21.33333;9551,1,1,21.33333;9550,1,1,21.33333;18553,1,1,5.16666;19509,1,1,13.3443;19508,1,1,13.3443;19510,1,1,13.3443" />
|
<set name="capsuled_items" val="19448,1,1,0.9666;19447,1,1,0.3666;18552,1,1,5.16666;18551,1,1,5.16666;9555,1,1,7.16666;9553,1,1,7.16666;9554,1,1,7.16666;9552,1,1,7.16666;9557,1,1,7.16666;9556,1,1,7.16666;9549,1,1,21.33333;9547,1,1,21.33333;9548,1,1,21.33333;9546,1,1,21.33333;9551,1,1,21.33333;9550,1,1,21.33333;18553,1,1,5.16666;19509,1,1,13.3443;19508,1,1,13.3443;19510,1,1,13.3443" />
|
||||||
<set name="default_action" val="CAPSULE" />
|
<set name="default_action" val="CAPSULE" />
|
||||||
|
<set name="extractableCountMin" val="1" />
|
||||||
|
<set name="extractableCountMax" val="1" />
|
||||||
<set name="handler" val="ExtractableItems" />
|
<set name="handler" val="ExtractableItems" />
|
||||||
<set name="is_auctionable" val="false" />
|
<set name="is_auctionable" val="false" />
|
||||||
<set name="is_depositable" val="false" />
|
<set name="is_depositable" val="false" />
|
||||||
@@ -420,6 +422,8 @@
|
|||||||
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
||||||
<set name="capsuled_items" val="19448,1,1,0.9666;19447,1,1,0.3666;18552,1,1,5.16666;18551,1,1,5.16666;9555,1,1,8.16666;9553,1,1,8.16666;9554,1,1,8.16666;9552,1,1,8.16666;9557,1,1,8.16666;9556,1,1,8.16666;9549,1,1,21.33333;9547,1,1,21.33333;9548,1,1,21.33333;9546,1,1,21.33333;9551,1,1,21.33333;9550,1,1,21.33333;17527,1,1,6.16666;17526,1,1,1.16666;18553,1,1,5.16666;19509,1,1,13.3443;19508,1,1,13.3443;19510,1,1,13.3443" />
|
<set name="capsuled_items" val="19448,1,1,0.9666;19447,1,1,0.3666;18552,1,1,5.16666;18551,1,1,5.16666;9555,1,1,8.16666;9553,1,1,8.16666;9554,1,1,8.16666;9552,1,1,8.16666;9557,1,1,8.16666;9556,1,1,8.16666;9549,1,1,21.33333;9547,1,1,21.33333;9548,1,1,21.33333;9546,1,1,21.33333;9551,1,1,21.33333;9550,1,1,21.33333;17527,1,1,6.16666;17526,1,1,1.16666;18553,1,1,5.16666;19509,1,1,13.3443;19508,1,1,13.3443;19510,1,1,13.3443" />
|
||||||
<set name="default_action" val="CAPSULE" />
|
<set name="default_action" val="CAPSULE" />
|
||||||
|
<set name="extractableCountMin" val="1" />
|
||||||
|
<set name="extractableCountMax" val="1" />
|
||||||
<set name="handler" val="ExtractableItems" />
|
<set name="handler" val="ExtractableItems" />
|
||||||
<set name="is_auctionable" val="false" />
|
<set name="is_auctionable" val="false" />
|
||||||
<set name="is_depositable" val="false" />
|
<set name="is_depositable" val="false" />
|
||||||
@@ -435,6 +439,8 @@
|
|||||||
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
||||||
<set name="capsuled_items" val="19448,1,1,0.9666;19447,1,1,0.3666;18555,1,1,3.16666;18554,1,1,3.16666;9555,1,1,8.16666;9553,1,1,8.16666;9554,1,1,8.16666;9552,1,1,8.16666;9557,1,1,8.16666;9556,1,1,8.16666;9549,1,1,21.33333;9547,1,1,21.33333;9548,1,1,21.33333;9546,1,1,21.33333;9551,1,1,21.33333;9550,1,1,21.33333;17527,1,1,6.16666;17526,1,1,1.16666;18556,1,1,2.06666;19512,1,1,3.0443;19511,1,1,3.3443;19513,1,1,3.3443" />
|
<set name="capsuled_items" val="19448,1,1,0.9666;19447,1,1,0.3666;18555,1,1,3.16666;18554,1,1,3.16666;9555,1,1,8.16666;9553,1,1,8.16666;9554,1,1,8.16666;9552,1,1,8.16666;9557,1,1,8.16666;9556,1,1,8.16666;9549,1,1,21.33333;9547,1,1,21.33333;9548,1,1,21.33333;9546,1,1,21.33333;9551,1,1,21.33333;9550,1,1,21.33333;17527,1,1,6.16666;17526,1,1,1.16666;18556,1,1,2.06666;19512,1,1,3.0443;19511,1,1,3.3443;19513,1,1,3.3443" />
|
||||||
<set name="default_action" val="CAPSULE" />
|
<set name="default_action" val="CAPSULE" />
|
||||||
|
<set name="extractableCountMin" val="1" />
|
||||||
|
<set name="extractableCountMax" val="1" />
|
||||||
<set name="handler" val="ExtractableItems" />
|
<set name="handler" val="ExtractableItems" />
|
||||||
<set name="is_auctionable" val="false" />
|
<set name="is_auctionable" val="false" />
|
||||||
<set name="is_depositable" val="false" />
|
<set name="is_depositable" val="false" />
|
||||||
@@ -450,6 +456,8 @@
|
|||||||
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
||||||
<set name="capsuled_items" val="18552,1,1,5.6666;18551,1,1,5.6666;9555,1,1,3.16666;9553,1,1,3.16666;9554,1,1,3.16666;9552,1,1,3.16666;9557,1,1,3.16666;9556,1,1,3.16666;34651,1,1,21.33333;34650,1,1,21.33333;34652,1,1,21.33333;34649,1,1,21.33333;34653,1,1,21.33333;34654,1,1,21.33333;9549,1,1,13.3443;9547,1,1,13.3443;9548,1,1,13.3443;9546,1,1,13.3443;9551,1,1,13.3443;9550,1,1,13.3443;17527,1,1,5.33333;17526,1,1,1.33333;18553,1,1,5.33333" />
|
<set name="capsuled_items" val="18552,1,1,5.6666;18551,1,1,5.6666;9555,1,1,3.16666;9553,1,1,3.16666;9554,1,1,3.16666;9552,1,1,3.16666;9557,1,1,3.16666;9556,1,1,3.16666;34651,1,1,21.33333;34650,1,1,21.33333;34652,1,1,21.33333;34649,1,1,21.33333;34653,1,1,21.33333;34654,1,1,21.33333;9549,1,1,13.3443;9547,1,1,13.3443;9548,1,1,13.3443;9546,1,1,13.3443;9551,1,1,13.3443;9550,1,1,13.3443;17527,1,1,5.33333;17526,1,1,1.33333;18553,1,1,5.33333" />
|
||||||
<set name="default_action" val="CAPSULE" />
|
<set name="default_action" val="CAPSULE" />
|
||||||
|
<set name="extractableCountMin" val="1" />
|
||||||
|
<set name="extractableCountMax" val="1" />
|
||||||
<set name="handler" val="ExtractableItems" />
|
<set name="handler" val="ExtractableItems" />
|
||||||
<set name="is_auctionable" val="false" />
|
<set name="is_auctionable" val="false" />
|
||||||
<set name="is_depositable" val="false" />
|
<set name="is_depositable" val="false" />
|
||||||
@@ -465,6 +473,8 @@
|
|||||||
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
||||||
<set name="capsuled_items" val="18552,1,1,5.6666;18551,1,1,5.6666;9555,1,1,3.16666;9553,1,1,3.16666;9554,1,1,3.16666;9552,1,1,3.16666;9557,1,1,3.16666;9556,1,1,3.16666;34651,1,1,21.33333;34650,1,1,21.33333;34652,1,1,21.33333;34649,1,1,21.33333;34653,1,1,21.33333;34654,1,1,21.33333;9549,1,1,13.3443;9547,1,1,13.3443;9548,1,1,13.3443;9546,1,1,13.3443;9551,1,1,13.3443;9550,1,1,13.3443;17527,1,1,5.33333;17526,1,1,1.33333;18553,1,1,5.33333" />
|
<set name="capsuled_items" val="18552,1,1,5.6666;18551,1,1,5.6666;9555,1,1,3.16666;9553,1,1,3.16666;9554,1,1,3.16666;9552,1,1,3.16666;9557,1,1,3.16666;9556,1,1,3.16666;34651,1,1,21.33333;34650,1,1,21.33333;34652,1,1,21.33333;34649,1,1,21.33333;34653,1,1,21.33333;34654,1,1,21.33333;9549,1,1,13.3443;9547,1,1,13.3443;9548,1,1,13.3443;9546,1,1,13.3443;9551,1,1,13.3443;9550,1,1,13.3443;17527,1,1,5.33333;17526,1,1,1.33333;18553,1,1,5.33333" />
|
||||||
<set name="default_action" val="CAPSULE" />
|
<set name="default_action" val="CAPSULE" />
|
||||||
|
<set name="extractableCountMin" val="1" />
|
||||||
|
<set name="extractableCountMax" val="1" />
|
||||||
<set name="handler" val="ExtractableItems" />
|
<set name="handler" val="ExtractableItems" />
|
||||||
<set name="is_auctionable" val="false" />
|
<set name="is_auctionable" val="false" />
|
||||||
<set name="is_depositable" val="false" />
|
<set name="is_depositable" val="false" />
|
||||||
@@ -480,6 +490,8 @@
|
|||||||
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
<set name="icon" val="icon.event_hero_treasure_box_i00" />
|
||||||
<set name="capsuled_items" val="18555,1,1,0.6666;18554,1,1,0.5666;9555,1,1,3.16666;9553,1,1,3.16666;9554,1,1,3.16666;9552,1,1,3.16666;9557,1,1,3.16666;9556,1,1,3.16666;34651,1,1,21.33333;34650,1,1,21.33333;34652,1,1,21.33333;34649,1,1,21.33333;34653,1,1,21.33333;34654,1,1,21.33333;9549,1,1,13.3443;9547,1,1,13.3443;9548,1,1,13.3443;9546,1,1,13.3443;9551,1,1,13.3443;9550,1,1,13.3443;17527,1,1,5.33333;17526,1,1,1.33333;18556,1,1,0.63333" />
|
<set name="capsuled_items" val="18555,1,1,0.6666;18554,1,1,0.5666;9555,1,1,3.16666;9553,1,1,3.16666;9554,1,1,3.16666;9552,1,1,3.16666;9557,1,1,3.16666;9556,1,1,3.16666;34651,1,1,21.33333;34650,1,1,21.33333;34652,1,1,21.33333;34649,1,1,21.33333;34653,1,1,21.33333;34654,1,1,21.33333;9549,1,1,13.3443;9547,1,1,13.3443;9548,1,1,13.3443;9546,1,1,13.3443;9551,1,1,13.3443;9550,1,1,13.3443;17527,1,1,5.33333;17526,1,1,1.33333;18556,1,1,0.63333" />
|
||||||
<set name="default_action" val="CAPSULE" />
|
<set name="default_action" val="CAPSULE" />
|
||||||
|
<set name="extractableCountMin" val="1" />
|
||||||
|
<set name="extractableCountMax" val="1" />
|
||||||
<set name="handler" val="ExtractableItems" />
|
<set name="handler" val="ExtractableItems" />
|
||||||
<set name="is_auctionable" val="false" />
|
<set name="is_auctionable" val="false" />
|
||||||
<set name="is_depositable" val="false" />
|
<set name="is_depositable" val="false" />
|
||||||
|
2
trunk/dist/game/data/xsd/items.xsd
vendored
2
trunk/dist/game/data/xsd/items.xsd
vendored
@@ -24,6 +24,8 @@
|
|||||||
<xs:enumeration value="equip_condition" />
|
<xs:enumeration value="equip_condition" />
|
||||||
<xs:enumeration value="equip_reuse_delay" />
|
<xs:enumeration value="equip_reuse_delay" />
|
||||||
<xs:enumeration value="ex_immediate_effect" />
|
<xs:enumeration value="ex_immediate_effect" />
|
||||||
|
<xs:enumeration value="extractableCountMin" />
|
||||||
|
<xs:enumeration value="extractableCountMax" />
|
||||||
<xs:enumeration value="etcitem_type" />
|
<xs:enumeration value="etcitem_type" />
|
||||||
<xs:enumeration value="for_npc" />
|
<xs:enumeration value="for_npc" />
|
||||||
<xs:enumeration value="handler" />
|
<xs:enumeration value="handler" />
|
||||||
|
@@ -36,6 +36,8 @@ public final class L2EtcItem extends L2Item
|
|||||||
private EtcItemType _type;
|
private EtcItemType _type;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
private final List<L2ExtractableProduct> _extractableItems;
|
private final List<L2ExtractableProduct> _extractableItems;
|
||||||
|
private final int _extractableCountMin;
|
||||||
|
private final int _extractableCountMax;
|
||||||
private final boolean _isInfinite;
|
private final boolean _isInfinite;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -130,6 +132,13 @@ public final class L2EtcItem extends L2Item
|
|||||||
_extractableItems = null;
|
_extractableItems = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_extractableCountMin = set.getInt("extractableCountMin", 0);
|
||||||
|
_extractableCountMax = set.getInt("extractableCountMax", 0);
|
||||||
|
if (_extractableCountMin > _extractableCountMax)
|
||||||
|
{
|
||||||
|
_log.warning("Item " + this + " extractableCountMin is bigger than extractableCountMax!");
|
||||||
|
}
|
||||||
|
|
||||||
_isInfinite = set.getBoolean("is_infinite", false);
|
_isInfinite = set.getBoolean("is_infinite", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,6 +184,22 @@ public final class L2EtcItem extends L2Item
|
|||||||
return _extractableItems;
|
return _extractableItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the minimum count of extractable items
|
||||||
|
*/
|
||||||
|
public int getExtractableCountMin()
|
||||||
|
{
|
||||||
|
return _extractableCountMin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the maximum count of extractable items
|
||||||
|
*/
|
||||||
|
public int getExtractableCountMax()
|
||||||
|
{
|
||||||
|
return _extractableCountMax;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if item is infinite
|
* @return true if item is infinite
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user