|
@@ -65,12 +65,7 @@ public final class ShareHandler {
|
|
}
|
|
}
|
|
|
|
|
|
double partySize = nearMembers.size() + 1;
|
|
double partySize = nearMembers.size() + 1;
|
|
- double shareBonus = Config.getInstance().getPartyShareBonusBase() + partySize * Config.getInstance().getPartyShareBonusIncrease();
|
|
|
|
-
|
|
|
|
- if (shareBonus > Config.getInstance().getPartyShareBonusCap()) {
|
|
|
|
- shareBonus = Config.getInstance().getPartyShareBonusCap();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ double shareBonus = Math.min(Config.getInstance().getPartyShareBonusBase() + partySize * Config.getInstance().getPartyShareBonusIncrease(), Config.getInstance().getPartyShareBonusCap());
|
|
float splitXp = (float) (xp / partySize * shareBonus);
|
|
float splitXp = (float) (xp / partySize * shareBonus);
|
|
|
|
|
|
for (Player member : nearMembers) {
|
|
for (Player member : nearMembers) {
|
|
@@ -78,7 +73,6 @@ public final class ShareHandler {
|
|
}
|
|
}
|
|
|
|
|
|
mcMMOPlayer.beginUnsharedXpGain(skillType, splitXp);
|
|
mcMMOPlayer.beginUnsharedXpGain(skillType, splitXp);
|
|
-
|
|
|
|
return true;
|
|
return true;
|
|
|
|
|
|
case NONE:
|
|
case NONE:
|
|
@@ -96,32 +90,43 @@ public final class ShareHandler {
|
|
*/
|
|
*/
|
|
public static boolean handleItemShare(Item drop, McMMOPlayer mcMMOPlayer) {
|
|
public static boolean handleItemShare(Item drop, McMMOPlayer mcMMOPlayer) {
|
|
ItemStack itemStack = drop.getItemStack();
|
|
ItemStack itemStack = drop.getItemStack();
|
|
|
|
+ ItemShareType dropType = ItemShareType.getShareType(itemStack);
|
|
|
|
+
|
|
|
|
+ if (dropType == null) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
Party party = mcMMOPlayer.getParty();
|
|
Party party = mcMMOPlayer.getParty();
|
|
- Player player = mcMMOPlayer.getPlayer();
|
|
|
|
- Player winningPlayer = null;
|
|
|
|
|
|
|
|
- ItemStack newStack = itemStack.clone();
|
|
|
|
- newStack.setAmount(1);
|
|
|
|
|
|
+ if (!party.sharingDrops(dropType)) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
|
|
- ItemShareType dropType = ItemShareType.getShareType(itemStack);
|
|
|
|
|
|
+ ShareMode shareMode = party.getItemShareMode();
|
|
|
|
|
|
- if (dropType == null || !party.sharingDrops(dropType)) {
|
|
|
|
|
|
+ if (shareMode == ShareMode.NONE) {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
- switch (party.getItemShareMode()) {
|
|
|
|
- case EQUAL:
|
|
|
|
- McMMOPlayer mcMMOTarget;
|
|
|
|
- nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
|
|
|
|
|
|
+ Player player = mcMMOPlayer.getPlayer();
|
|
|
|
|
|
- if (nearMembers.isEmpty()) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
|
|
|
|
|
|
- nearMembers.add(player);
|
|
|
|
- partySize = nearMembers.size();
|
|
|
|
|
|
+ if (nearMembers.isEmpty()) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Player winningPlayer = null;
|
|
|
|
+ ItemStack newStack = itemStack.clone();
|
|
|
|
+
|
|
|
|
+ nearMembers.add(player);
|
|
|
|
+ partySize = nearMembers.size();
|
|
|
|
+
|
|
|
|
+ drop.remove();
|
|
|
|
+ newStack.setAmount(1);
|
|
|
|
|
|
- drop.remove();
|
|
|
|
|
|
+ switch (shareMode) {
|
|
|
|
+ case EQUAL:
|
|
int itemWeight = ItemWeightConfig.getInstance().getItemWeight(itemStack.getType());
|
|
int itemWeight = ItemWeightConfig.getInstance().getItemWeight(itemStack.getType());
|
|
|
|
|
|
for (int i = 0; i < itemStack.getAmount(); i++) {
|
|
for (int i = 0; i < itemStack.getAmount(); i++) {
|
|
@@ -132,64 +137,46 @@ public final class ShareHandler {
|
|
int itemShareModifier = mcMMOMember.getItemShareModifier();
|
|
int itemShareModifier = mcMMOMember.getItemShareModifier();
|
|
int diceRoll = Misc.getRandom().nextInt(itemShareModifier);
|
|
int diceRoll = Misc.getRandom().nextInt(itemShareModifier);
|
|
|
|
|
|
- if (diceRoll > highestRoll) {
|
|
|
|
- highestRoll = diceRoll;
|
|
|
|
-
|
|
|
|
- if (winningPlayer != null) {
|
|
|
|
- McMMOPlayer mcMMOWinning = UserManager.getPlayer(winningPlayer);
|
|
|
|
- mcMMOWinning.setItemShareModifier(mcMMOWinning.getItemShareModifier() + itemWeight);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- winningPlayer = member;
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
|
|
+ if (diceRoll <= highestRoll) {
|
|
mcMMOMember.setItemShareModifier(itemShareModifier + itemWeight);
|
|
mcMMOMember.setItemShareModifier(itemShareModifier + itemWeight);
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- mcMMOTarget = UserManager.getPlayer(winningPlayer);
|
|
|
|
- mcMMOTarget.setItemShareModifier(mcMMOTarget.getItemShareModifier() - itemWeight);
|
|
|
|
|
|
+ highestRoll = diceRoll;
|
|
|
|
+
|
|
|
|
+ if (winningPlayer != null) {
|
|
|
|
+ McMMOPlayer mcMMOWinning = UserManager.getPlayer(winningPlayer);
|
|
|
|
+ mcMMOWinning.setItemShareModifier(mcMMOWinning.getItemShareModifier() + itemWeight);
|
|
|
|
+ }
|
|
|
|
|
|
- if (winningPlayer.getInventory().addItem(newStack).size() != 0) {
|
|
|
|
- winningPlayer.getWorld().dropItemNaturally(winningPlayer.getLocation(), newStack);
|
|
|
|
|
|
+ winningPlayer = member;
|
|
}
|
|
}
|
|
|
|
|
|
- winningPlayer.updateInventory();
|
|
|
|
|
|
+ McMMOPlayer mcMMOTarget = UserManager.getPlayer(winningPlayer);
|
|
|
|
+ mcMMOTarget.setItemShareModifier(mcMMOTarget.getItemShareModifier() - itemWeight);
|
|
|
|
+ awardDrop(winningPlayer, newStack);
|
|
}
|
|
}
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
|
|
|
|
case RANDOM:
|
|
case RANDOM:
|
|
- nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
|
|
|
|
-
|
|
|
|
- if (nearMembers.isEmpty()) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- partySize = nearMembers.size() + 1;
|
|
|
|
-
|
|
|
|
- drop.remove();
|
|
|
|
-
|
|
|
|
for (int i = 0; i < itemStack.getAmount(); i++) {
|
|
for (int i = 0; i < itemStack.getAmount(); i++) {
|
|
- int randomMember = Misc.getRandom().nextInt(partySize);
|
|
|
|
-
|
|
|
|
- if (randomMember >= nearMembers.size()) {
|
|
|
|
- winningPlayer = player;
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- winningPlayer = nearMembers.get(randomMember);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (winningPlayer.getInventory().addItem(newStack).size() != 0) {
|
|
|
|
- winningPlayer.getWorld().dropItemNaturally(winningPlayer.getLocation(), newStack);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- winningPlayer.updateInventory();
|
|
|
|
|
|
+ winningPlayer = nearMembers.get(Misc.getRandom().nextInt(partySize));
|
|
|
|
+ awardDrop(winningPlayer, newStack);
|
|
}
|
|
}
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
|
|
|
|
- case NONE:
|
|
|
|
default:
|
|
default:
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private static void awardDrop(Player winningPlayer, ItemStack drop) {
|
|
|
|
+ if (winningPlayer.getInventory().addItem(drop).size() != 0) {
|
|
|
|
+ winningPlayer.getWorld().dropItemNaturally(winningPlayer.getLocation(), drop);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ winningPlayer.updateInventory();
|
|
|
|
+ }
|
|
}
|
|
}
|