ClassMaster optional reward fixes.

This commit is contained in:
MobiusDev 2017-10-16 00:40:22 +00:00
parent 79646b1e2a
commit 6fe2a25cc8
4 changed files with 272 additions and 28 deletions

View File

@ -376,19 +376,41 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
final ClassChangeData data = getClassChangeData(classDataIndex);
if ((data != null) && (data.getItemsRequired().size() > 0))
if (data != null)
{
for (ItemHolder ri : data.getItemsRequired())
// Required items.
if (data.getItemsRequired().size() > 0)
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
for (ItemHolder ri : data.getItemsRequired())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
}
}
for (ItemHolder ri : data.getItemsRequired())
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNoble(true);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
@ -782,6 +804,45 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
else
{
final ClassChangeData data = _classChangeData.stream().filter(ccd -> ccd.isInCategory(player)).findFirst().get();
if (data != null)
{
// Required items.
if (data.getItemsRequired().size() > 0)
{
for (ItemHolder ri : data.getItemsRequired())
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return false; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), player, true);
}
}
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNoble(true);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
player.setClassId(newClass.getId());
if (player.isSubClassActive())
{

View File

@ -376,19 +376,41 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
final ClassChangeData data = getClassChangeData(classDataIndex);
if ((data != null) && (data.getItemsRequired().size() > 0))
if (data != null)
{
for (ItemHolder ri : data.getItemsRequired())
// Required items.
if (data.getItemsRequired().size() > 0)
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
for (ItemHolder ri : data.getItemsRequired())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
}
}
for (ItemHolder ri : data.getItemsRequired())
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNobleLevel(1);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
@ -782,6 +804,45 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
else
{
final ClassChangeData data = _classChangeData.stream().filter(ccd -> ccd.isInCategory(player)).findFirst().get();
if (data != null)
{
// Required items.
if (data.getItemsRequired().size() > 0)
{
for (ItemHolder ri : data.getItemsRequired())
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return false; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), player, true);
}
}
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNobleLevel(1);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
player.setClassId(newClass.getId());
if (player.isSubClassActive())
{

View File

@ -376,19 +376,41 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
final ClassChangeData data = getClassChangeData(classDataIndex);
if ((data != null) && (data.getItemsRequired().size() > 0))
if (data != null)
{
for (ItemHolder ri : data.getItemsRequired())
// Required items.
if (data.getItemsRequired().size() > 0)
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
for (ItemHolder ri : data.getItemsRequired())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
}
}
for (ItemHolder ri : data.getItemsRequired())
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNobleLevel(1);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
@ -782,6 +804,45 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
else
{
final ClassChangeData data = _classChangeData.stream().filter(ccd -> ccd.isInCategory(player)).findFirst().get();
if (data != null)
{
// Required items.
if (data.getItemsRequired().size() > 0)
{
for (ItemHolder ri : data.getItemsRequired())
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return false; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), player, true);
}
}
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNobleLevel(1);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
player.setClassId(newClass.getId());
if (player.isSubClassActive())
{

View File

@ -344,19 +344,41 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
final ClassChangeData data = getClassChangeData(classDataIndex);
if ((data != null) && (data.getItemsRequired().size() > 0))
if (data != null)
{
for (ItemHolder ri : data.getItemsRequired())
// Required items.
if (data.getItemsRequired().size() > 0)
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
for (ItemHolder ri : data.getItemsRequired())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return null; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
}
}
for (ItemHolder ri : data.getItemsRequired())
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), npc, true);
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNoble(true);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
@ -750,6 +772,45 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
else
{
final ClassChangeData data = _classChangeData.stream().filter(ccd -> ccd.isInCategory(player)).findFirst().get();
if (data != null)
{
// Required items.
if (data.getItemsRequired().size() > 0)
{
for (ItemHolder ri : data.getItemsRequired())
{
if (player.getInventory().getInventoryItemCount(ri.getId(), -1) < ri.getCount())
{
player.sendMessage("You do not have enough items.");
return false; // No class change if payment failed.
}
}
for (ItemHolder ri : data.getItemsRequired())
{
player.destroyItemByItemId(getClass().getSimpleName(), ri.getId(), ri.getCount(), player, true);
}
}
// Give possible rewards.
if (data.getItemsRewarded().size() > 0)
{
for (ItemHolder ri : data.getItemsRewarded())
{
giveItems(player, ri);
}
}
// Give possible nobless status reward.
if (data.isRewardNoblesse())
{
player.setNoble(true);
}
// Give possible hero status reward.
if (data.isRewardHero())
{
player.setHero(true);
}
}
player.setClassId(newClass.getId());
if (player.isSubClassActive())
{