forked from Upstream/mmocore
Added max range for exp spliting
This commit is contained in:
parent
6380cf4cdd
commit
b7de3e8c11
@ -4,8 +4,6 @@ import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.player.cooldown.CooldownMap;
|
||||
import io.lumine.mythic.lib.player.skill.PassiveSkill;
|
||||
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
|
||||
import net.Indyuce.mmocore.party.provided.Party;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.ConfigMessage;
|
||||
import net.Indyuce.mmocore.api.SoundEvent;
|
||||
@ -32,6 +30,7 @@ import net.Indyuce.mmocore.experience.droptable.ExperienceTable;
|
||||
import net.Indyuce.mmocore.guild.provided.Guild;
|
||||
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
|
||||
import net.Indyuce.mmocore.party.AbstractParty;
|
||||
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
|
||||
import net.Indyuce.mmocore.party.provided.Party;
|
||||
import net.Indyuce.mmocore.player.Unlockable;
|
||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||
@ -59,6 +58,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer {
|
||||
@ -299,7 +299,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
|
||||
public void resetSkillTree(SkillTree skillTree) {
|
||||
for (SkillTreeNode node : skillTree.getNodes()) {
|
||||
node.getExperienceTable().reset(this,node);
|
||||
node.getExperienceTable().reset(this, node);
|
||||
setNodeLevel(node, 0);
|
||||
}
|
||||
skillTree.setupNodeState(this);
|
||||
@ -337,7 +337,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
public void close() {
|
||||
|
||||
// Remove from party if it is MMO Party Module
|
||||
if(MMOCore.plugin.partyModule instanceof MMOCorePartyModule) {
|
||||
if (MMOCore.plugin.partyModule instanceof MMOCorePartyModule) {
|
||||
AbstractParty party = getParty();
|
||||
if (party != null && party instanceof Party)
|
||||
((Party) party).removeMember(this);
|
||||
@ -751,19 +751,25 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
if (value <= 0)
|
||||
return;
|
||||
|
||||
if (hasReachedMaxLevel()) {
|
||||
setExperience(0);
|
||||
return;
|
||||
}
|
||||
|
||||
// Splitting exp through party members
|
||||
AbstractParty party;
|
||||
if (splitExp && (party = getParty()) != null) {
|
||||
List<PlayerData> onlineMembers = party.getOnlineMembers();
|
||||
value /= onlineMembers.size();
|
||||
for (PlayerData member : onlineMembers)
|
||||
if (!equals(member))
|
||||
member.giveExperience(value, source, null, false);
|
||||
final List<PlayerData> nearbyMembers = party.getOnlineMembers().stream()
|
||||
.filter(pd -> {
|
||||
if (equals(pd))
|
||||
return false;
|
||||
final double maxDis = MMOCore.plugin.configManager.partyMaxExpSplitRange;
|
||||
return maxDis <= 0 || pd.getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) < maxDis * maxDis;
|
||||
}).collect(Collectors.toList());
|
||||
value /= nearbyMembers.size();
|
||||
for (PlayerData member : nearbyMembers)
|
||||
member.giveExperience(value, source, null, false);
|
||||
}
|
||||
|
||||
// Must be placed after exp spliting
|
||||
if (hasReachedMaxLevel()) {
|
||||
setExperience(0);
|
||||
return;
|
||||
}
|
||||
|
||||
// Apply buffs AFTER splitting exp
|
||||
|
@ -2,8 +2,8 @@ package net.Indyuce.mmocore.manager;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.ConfigFile;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.input.ChatInput;
|
||||
import net.Indyuce.mmocore.api.util.input.PlayerInput;
|
||||
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
|
||||
@ -26,8 +26,8 @@ public class ConfigManager {
|
||||
public String partyChatPrefix, noSkillBoundPlaceholder;
|
||||
public ChatColor staminaFull, staminaHalf, staminaEmpty;
|
||||
public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown;
|
||||
public double lootChestsChanceWeight, fishingDropsChanceWeight;
|
||||
public int maxPartyLevelDifference,maxBoundActiveSkills,maxBoundPassiveSkills,waypointWarpTime;
|
||||
public double lootChestsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange;
|
||||
public int maxPartyLevelDifference, maxBoundActiveSkills, maxBoundPassiveSkills, waypointWarpTime;
|
||||
|
||||
private final FileConfiguration messages;
|
||||
|
||||
@ -109,6 +109,7 @@ public class ConfigManager {
|
||||
lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests");
|
||||
fishingDropsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.fishing-drops");
|
||||
maxPartyLevelDifference = MMOCore.plugin.getConfig().getInt("party.max-level-difference");
|
||||
partyMaxExpSplitRange = MMOCore.plugin.getConfig().getDouble("party.max-exp-split-range");
|
||||
splitProfessionExp = MMOCore.plugin.getConfig().getBoolean("party.profession-exp-split");
|
||||
disableQuestBossBar = MMOCore.plugin.getConfig().getBoolean("mmocore-quests.disable-boss-bar");
|
||||
|
||||
|
@ -149,6 +149,11 @@ party:
|
||||
# that feature.
|
||||
max-level-difference: 3
|
||||
|
||||
# Exp won't be split if players are too far apart.
|
||||
#
|
||||
# Set to 0 to disable
|
||||
max-exp-split-range: 50
|
||||
|
||||
# When enabled, being in a party also splits profession exp
|
||||
profession-exp-split: false
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user