diff --git a/src/engine/gameManager/LootManager.java b/src/engine/gameManager/LootManager.java index 618f09b8..5000b884 100644 --- a/src/engine/gameManager/LootManager.java +++ b/src/engine/gameManager/LootManager.java @@ -11,14 +11,13 @@ package engine.gameManager; import engine.Enum; import engine.loot.*; import engine.net.DispatchMessage; +import engine.net.client.msg.ErrorPopupMsg; import engine.net.client.msg.chat.ChatSystemMsg; import engine.objects.*; -import engine.server.MBServerStatics; import org.pmw.tinylog.Logger; import java.util.ArrayList; import java.util.HashMap; -import java.util.Random; import java.util.concurrent.ThreadLocalRandom; /** @@ -376,50 +375,63 @@ public enum LootManager { if (lootItem != null) mob.getCharItemManager().addItemToInventory(lootItem); } - public static void peddleFate(AbstractCharacter character, Item gift) { + + public static void peddleFate(PlayerCharacter playerCharacter, Item gift) { + //get table ID for the itembase ID + int tableID = 0; - if(_bootySetMap.get(gift.getItemBaseID()) != null) + + if (_bootySetMap.get(gift.getItemBaseID()) != null) tableID = _bootySetMap.get(gift.getItemBaseID()).get(ThreadLocalRandom.current().nextInt(_bootySetMap.get(gift.getItemBaseID()).size())).genTable; - //use 3010 for testing - //tableID = 3040; - if(tableID == 0) + if (tableID == 0) return; //get the character item manager - CharacterItemManager itemMan = character.getCharItemManager(); - if(itemMan == null) + + CharacterItemManager itemMan = playerCharacter.getCharItemManager(); + + if (itemMan == null) return; //check if player owns the gift he is trying to open - if(itemMan.doesCharOwnThisItem(gift.getObjectUUID()) == false) + + if (itemMan.doesCharOwnThisItem(gift.getObjectUUID()) == false) return; //roll 1-100 for the gen table selection + int genRoll = ThreadLocalRandom.current().nextInt(1,100 + 1); GenTableEntry selectedRow = GenTableEntry.rollTable(tableID, genRoll); + if(selectedRow == null) return; //roll 220-320 for the item table selection - int itemRoll = ThreadLocalRandom.current().nextInt(220,320 + 1); - ItemTableEntry selectedItem = ItemTableEntry.rollTable(selectedRow.itemTableID,itemRoll); - if(selectedItem == null) + + int itemRoll = ThreadLocalRandom.current().nextInt(220, 320 + 1); + ItemTableEntry selectedItem = ItemTableEntry.rollTable(selectedRow.itemTableID, itemRoll); + + if (selectedItem == null) return; //create the item from the table, quantity is always 1 - MobLoot winnings = new MobLoot(character, ItemBase.getItemBase(selectedItem.cacheID), 1, false); - if(winnings == null) + + MobLoot winnings = new MobLoot(playerCharacter, ItemBase.getItemBase(selectedItem.cacheID), 1, false); + + if (winnings == null) return; //early exit if the inventory of the player will not old the item - if(itemMan.hasRoomInventory(winnings.getItemBase().getWeight()) == false){ - ChatManager.chatSay(character,"You cannot hold your winnings!",false); + + if (itemMan.hasRoomInventory(winnings.getItemBase().getWeight()) == false) { + ErrorPopupMsg.sendErrorPopup(playerCharacter, 27); return; } //determine if the winning item needs a prefix + if(selectedRow.pModTable != 0){ int prefixRoll = ThreadLocalRandom.current().nextInt(220,320 + 1); ModTableEntry prefix = ModTableEntry.rollTable(selectedRow.pModTable, prefixRoll); @@ -428,18 +440,22 @@ public enum LootManager { } //determine if the winning item needs a suffix + if(selectedRow.sModTable != 0){ int suffixRoll = ThreadLocalRandom.current().nextInt(220,320 + 1); ModTableEntry suffix = ModTableEntry.rollTable(selectedRow.sModTable, suffixRoll); - if(suffix != null) + if (suffix != null) winnings.addPermanentEnchantment(suffix.action, 0, suffix.level, true); } winnings.setIsID(true); + //remove gift from inventory + itemMan.consume(gift); //add winnings to player inventory - Item playerWinnings = winnings.promoteToItem((PlayerCharacter)character); + + Item playerWinnings = winnings.promoteToItem((PlayerCharacter) playerCharacter); itemMan.addItemToInventory(playerWinnings); itemMan.updateInventory(); } diff --git a/src/engine/net/client/handlers/ObjectActionMsgHandler.java b/src/engine/net/client/handlers/ObjectActionMsgHandler.java index 9e3dfc30..d6ef538e 100644 --- a/src/engine/net/client/handlers/ObjectActionMsgHandler.java +++ b/src/engine/net/client/handlers/ObjectActionMsgHandler.java @@ -19,7 +19,6 @@ import engine.powers.PowersBase; import org.pmw.tinylog.Logger; import java.util.ArrayList; -import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.locks.ReentrantReadWriteLock; /* @@ -424,7 +423,7 @@ public class ObjectActionMsgHandler extends AbstractClientMsgHandler { break; //ANNIVERSERY GIFT case 31: - + // *** Disabled for now: Needs bootyset created //if (ib.getUUID() == 971012) { // int random = ThreadLocalRandom.current().nextInt(ItemBase.AnniverseryGifts.size()); @@ -440,9 +439,8 @@ public class ObjectActionMsgHandler extends AbstractClientMsgHandler { // } // break; //} - // Garbage method removed until rewritten. - // LootTable.CreateGamblerItem(item, player); - LootManager.peddleFate(player,item); + + LootManager.peddleFate(player,item); break; case 30: //water bucket