Support for minimum and maximum extractable item count.

This commit is contained in:
MobiusDev
2015-12-18 20:37:19 +00:00
parent 3a7d5f5dda
commit 2d37b8c61c
4 changed files with 135 additions and 27 deletions

View File

@@ -63,51 +63,120 @@ public class ExtractableItems implements IItemHandler
return false;
}
boolean created = false;
List<L2ItemInstance> extractedItems = new ArrayList<>();
List<L2ItemInstance> enchantedItems = new ArrayList<>();
for (L2ExtractableProduct expi : exitem)
if (etcitem.getExtractableCountMin() > 0)
{
if (Rnd.get(100000) <= expi.getChance())
while (extractedItems.size() < etcitem.getExtractableCountMin())
{
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)
for (L2ExtractableProduct expi : exitem)
{
continue;
}
if (item.isStackable() || (createItemAmount == 1))
{
final L2ItemInstance newItem = activeChar.addItem("Extract", expi.getId(), createItemAmount, activeChar, false);
if (expi.getMaxEnchant() > 0)
if ((etcitem.getExtractableCountMax() > 0) && (extractedItems.size() == etcitem.getExtractableCountMax()))
{
newItem.setEnchantLevel(Rnd.get(expi.getMinEnchant(), expi.getMaxEnchant()));
enchantedItems.add(newItem);
break;
}
sendMessage(activeChar, newItem);
}
else
{
while (createItemAmount > 0)
if (Rnd.get(100000) <= expi.getChance())
{
final L2ItemInstance newItem = activeChar.addItem("Extract", expi.getId(), 1, activeChar, false);
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())
{
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;
}
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);
createItemAmount--;
}
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--;
}
}
}
created = true;
}
}
if (!created)
if (extractedItems.size() == 0)
{
activeChar.sendPacket(SystemMessageId.THERE_WAS_NOTHING_FOUND_INSIDE);
}

View File

@@ -405,6 +405,8 @@
<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="default_action" val="CAPSULE" />
<set name="extractableCountMin" val="1" />
<set name="extractableCountMax" val="1" />
<set name="handler" val="ExtractableItems" />
<set name="is_auctionable" val="false" />
<set name="is_depositable" val="false" />
@@ -420,6 +422,8 @@
<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="default_action" val="CAPSULE" />
<set name="extractableCountMin" val="1" />
<set name="extractableCountMax" val="1" />
<set name="handler" val="ExtractableItems" />
<set name="is_auctionable" val="false" />
<set name="is_depositable" val="false" />
@@ -435,6 +439,8 @@
<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="default_action" val="CAPSULE" />
<set name="extractableCountMin" val="1" />
<set name="extractableCountMax" val="1" />
<set name="handler" val="ExtractableItems" />
<set name="is_auctionable" val="false" />
<set name="is_depositable" val="false" />
@@ -450,6 +456,8 @@
<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="default_action" val="CAPSULE" />
<set name="extractableCountMin" val="1" />
<set name="extractableCountMax" val="1" />
<set name="handler" val="ExtractableItems" />
<set name="is_auctionable" val="false" />
<set name="is_depositable" val="false" />
@@ -465,6 +473,8 @@
<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="default_action" val="CAPSULE" />
<set name="extractableCountMin" val="1" />
<set name="extractableCountMax" val="1" />
<set name="handler" val="ExtractableItems" />
<set name="is_auctionable" val="false" />
<set name="is_depositable" val="false" />
@@ -480,6 +490,8 @@
<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="default_action" val="CAPSULE" />
<set name="extractableCountMin" val="1" />
<set name="extractableCountMax" val="1" />
<set name="handler" val="ExtractableItems" />
<set name="is_auctionable" val="false" />
<set name="is_depositable" val="false" />

View File

@@ -24,6 +24,8 @@
<xs:enumeration value="equip_condition" />
<xs:enumeration value="equip_reuse_delay" />
<xs:enumeration value="ex_immediate_effect" />
<xs:enumeration value="extractableCountMin" />
<xs:enumeration value="extractableCountMax" />
<xs:enumeration value="etcitem_type" />
<xs:enumeration value="for_npc" />
<xs:enumeration value="handler" />