Fixed some issues with item consumption.

This commit is contained in:
MobiusDev
2017-04-22 15:56:35 +00:00
parent f1c3c74f03
commit baa6819071
4 changed files with 20 additions and 38 deletions

View File

@@ -150,7 +150,7 @@ public class ItemSkillsTemplate implements IItemHandler
} }
} }
if (item.isPotion() || item.isElixir() || (successfulUse && checkConsume(item, hasConsumeSkill))) if (successfulUse && checkConsume(item, hasConsumeSkill))
{ {
if (!playable.destroyItem("Consume", item.getObjectId(), 1, playable, false)) if (!playable.destroyItem("Consume", item.getObjectId(), 1, playable, false))
{ {
@@ -172,6 +172,7 @@ public class ItemSkillsTemplate implements IItemHandler
switch (item.getItem().getDefaultAction()) switch (item.getItem().getDefaultAction())
{ {
case CAPSULE: case CAPSULE:
case SKILL_REDUCE:
{ {
if (!hasConsumeSkill && item.getItem().hasImmediateEffect()) if (!hasConsumeSkill && item.getItem().hasImmediateEffect())
{ {
@@ -179,7 +180,6 @@ public class ItemSkillsTemplate implements IItemHandler
} }
break; break;
} }
case SKILL_REDUCE:
case SKILL_REDUCE_ON_SKILL_SUCCESS: case SKILL_REDUCE_ON_SKILL_SUCCESS:
{ {
return false; return false;

View File

@@ -454,8 +454,8 @@ public class SkillCaster implements Runnable
// On each repeat recharge shots before cast. // On each repeat recharge shots before cast.
caster.rechargeShots(_skill.useSoulShot(), _skill.useSpiritShot(), false); caster.rechargeShots(_skill.useSoulShot(), _skill.useSpiritShot(), false);
// Consume skill reduced item. // Consume skill reduced item on success.
if ((_item != null) && ((_item.getItem().getDefaultAction() == ActionType.SKILL_REDUCE) || (_item.getItem().getDefaultAction() == ActionType.SKILL_REDUCE_ON_SKILL_SUCCESS))) if ((_item != null) && (_item.getItem().getDefaultAction() == ActionType.SKILL_REDUCE_ON_SKILL_SUCCESS))
{ {
caster.destroyItem(_skill.toString(), _item.getObjectId(), _skill.getItemConsumeCount(), target, true); caster.destroyItem(_skill.toString(), _item.getObjectId(), _skill.getItemConsumeCount(), target, true);
} }
@@ -891,26 +891,17 @@ public class SkillCaster implements Runnable
} }
} }
// Check if the spell consumes an Item // Check if a summon spell consumes an item.
// TODO: combine check and consume if (skill.hasEffectType(L2EffectType.SUMMON) && (skill.getItemConsumeId() > 0) && (skill.getItemConsumeCount() > 0) && (caster.getInventory() != null))
if ((skill.getItemConsumeId() > 0) && (skill.getItemConsumeCount() > 0) && (caster.getInventory() != null))
{ {
// Get the L2ItemInstance consumed by the spell // Get the L2ItemInstance consumed by the spell
final L2ItemInstance requiredItems = caster.getInventory().getItemByItemId(skill.getItemConsumeId()); final L2ItemInstance requiredItems = caster.getInventory().getItemByItemId(skill.getItemConsumeId());
if ((requiredItems == null) || (requiredItems.getCount() < skill.getItemConsumeCount())) if ((requiredItems == null) || (requiredItems.getCount() < skill.getItemConsumeCount()))
{ {
// Checked: when a summon skill failed, server show required consume item count final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SUMMONING_A_SERVITOR_COSTS_S2_S1);
if (skill.hasEffectType(L2EffectType.SUMMON)) sm.addItemName(skill.getItemConsumeId());
{ sm.addInt(skill.getItemConsumeCount());
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SUMMONING_A_SERVITOR_COSTS_S2_S1); caster.sendPacket(sm);
sm.addItemName(skill.getItemConsumeId());
sm.addInt(skill.getItemConsumeCount());
caster.sendPacket(sm);
}
else
{
caster.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);
}
return false; return false;
} }
} }

View File

@@ -150,7 +150,7 @@ public class ItemSkillsTemplate implements IItemHandler
} }
} }
if (item.isPotion() || item.isElixir() || (successfulUse && checkConsume(item, hasConsumeSkill))) if (successfulUse && checkConsume(item, hasConsumeSkill))
{ {
if (!playable.destroyItem("Consume", item.getObjectId(), 1, playable, false)) if (!playable.destroyItem("Consume", item.getObjectId(), 1, playable, false))
{ {
@@ -172,6 +172,7 @@ public class ItemSkillsTemplate implements IItemHandler
switch (item.getItem().getDefaultAction()) switch (item.getItem().getDefaultAction())
{ {
case CAPSULE: case CAPSULE:
case SKILL_REDUCE:
{ {
if (!hasConsumeSkill && item.getItem().hasImmediateEffect()) if (!hasConsumeSkill && item.getItem().hasImmediateEffect())
{ {
@@ -179,7 +180,6 @@ public class ItemSkillsTemplate implements IItemHandler
} }
break; break;
} }
case SKILL_REDUCE:
case SKILL_REDUCE_ON_SKILL_SUCCESS: case SKILL_REDUCE_ON_SKILL_SUCCESS:
{ {
return false; return false;

View File

@@ -454,8 +454,8 @@ public class SkillCaster implements Runnable
// On each repeat recharge shots before cast. // On each repeat recharge shots before cast.
caster.rechargeShots(_skill.useSoulShot(), _skill.useSpiritShot(), false); caster.rechargeShots(_skill.useSoulShot(), _skill.useSpiritShot(), false);
// Consume skill reduced item. // Consume skill reduced item on success.
if ((_item != null) && ((_item.getItem().getDefaultAction() == ActionType.SKILL_REDUCE) || (_item.getItem().getDefaultAction() == ActionType.SKILL_REDUCE_ON_SKILL_SUCCESS))) if ((_item != null) && (_item.getItem().getDefaultAction() == ActionType.SKILL_REDUCE_ON_SKILL_SUCCESS))
{ {
caster.destroyItem(_skill.toString(), _item.getObjectId(), _skill.getItemConsumeCount(), target, true); caster.destroyItem(_skill.toString(), _item.getObjectId(), _skill.getItemConsumeCount(), target, true);
} }
@@ -891,26 +891,17 @@ public class SkillCaster implements Runnable
} }
} }
// Check if the spell consumes an Item // Check if a summon spell consumes an item.
// TODO: combine check and consume if (skill.hasEffectType(L2EffectType.SUMMON) && (skill.getItemConsumeId() > 0) && (skill.getItemConsumeCount() > 0) && (caster.getInventory() != null))
if ((skill.getItemConsumeId() > 0) && (skill.getItemConsumeCount() > 0) && (caster.getInventory() != null))
{ {
// Get the L2ItemInstance consumed by the spell // Get the L2ItemInstance consumed by the spell
final L2ItemInstance requiredItems = caster.getInventory().getItemByItemId(skill.getItemConsumeId()); final L2ItemInstance requiredItems = caster.getInventory().getItemByItemId(skill.getItemConsumeId());
if ((requiredItems == null) || (requiredItems.getCount() < skill.getItemConsumeCount())) if ((requiredItems == null) || (requiredItems.getCount() < skill.getItemConsumeCount()))
{ {
// Checked: when a summon skill failed, server show required consume item count final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SUMMONING_A_SERVITOR_COSTS_S2_S1);
if (skill.hasEffectType(L2EffectType.SUMMON)) sm.addItemName(skill.getItemConsumeId());
{ sm.addInt(skill.getItemConsumeCount());
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SUMMONING_A_SERVITOR_COSTS_S2_S1); caster.sendPacket(sm);
sm.addItemName(skill.getItemConsumeId());
sm.addInt(skill.getItemConsumeCount());
caster.sendPacket(sm);
}
else
{
caster.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);
}
return false; return false;
} }
} }