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.api.player.MMOPlayerData;
|
||||||
import io.lumine.mythic.lib.player.cooldown.CooldownMap;
|
import io.lumine.mythic.lib.player.cooldown.CooldownMap;
|
||||||
import io.lumine.mythic.lib.player.skill.PassiveSkill;
|
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.MMOCore;
|
||||||
import net.Indyuce.mmocore.api.ConfigMessage;
|
import net.Indyuce.mmocore.api.ConfigMessage;
|
||||||
import net.Indyuce.mmocore.api.SoundEvent;
|
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.guild.provided.Guild;
|
||||||
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
|
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
|
||||||
import net.Indyuce.mmocore.party.AbstractParty;
|
import net.Indyuce.mmocore.party.AbstractParty;
|
||||||
|
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
|
||||||
import net.Indyuce.mmocore.party.provided.Party;
|
import net.Indyuce.mmocore.party.provided.Party;
|
||||||
import net.Indyuce.mmocore.player.Unlockable;
|
import net.Indyuce.mmocore.player.Unlockable;
|
||||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||||
@ -59,6 +58,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer {
|
public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer {
|
||||||
@ -751,21 +751,27 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
if (value <= 0)
|
if (value <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (hasReachedMaxLevel()) {
|
|
||||||
setExperience(0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Splitting exp through party members
|
// Splitting exp through party members
|
||||||
AbstractParty party;
|
AbstractParty party;
|
||||||
if (splitExp && (party = getParty()) != null) {
|
if (splitExp && (party = getParty()) != null) {
|
||||||
List<PlayerData> onlineMembers = party.getOnlineMembers();
|
final List<PlayerData> nearbyMembers = party.getOnlineMembers().stream()
|
||||||
value /= onlineMembers.size();
|
.filter(pd -> {
|
||||||
for (PlayerData member : onlineMembers)
|
if (equals(pd))
|
||||||
if (!equals(member))
|
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);
|
member.giveExperience(value, source, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Must be placed after exp spliting
|
||||||
|
if (hasReachedMaxLevel()) {
|
||||||
|
setExperience(0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Apply buffs AFTER splitting exp
|
// Apply buffs AFTER splitting exp
|
||||||
value *= (1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100) * MMOCore.plugin.boosterManager.getMultiplier(null);
|
value *= (1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100) * MMOCore.plugin.boosterManager.getMultiplier(null);
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ package net.Indyuce.mmocore.manager;
|
|||||||
|
|
||||||
import io.lumine.mythic.lib.MythicLib;
|
import io.lumine.mythic.lib.MythicLib;
|
||||||
import net.Indyuce.mmocore.MMOCore;
|
import net.Indyuce.mmocore.MMOCore;
|
||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
|
||||||
import net.Indyuce.mmocore.api.ConfigFile;
|
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.ChatInput;
|
||||||
import net.Indyuce.mmocore.api.util.input.PlayerInput;
|
import net.Indyuce.mmocore.api.util.input.PlayerInput;
|
||||||
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
|
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
|
||||||
@ -26,7 +26,7 @@ public class ConfigManager {
|
|||||||
public String partyChatPrefix, noSkillBoundPlaceholder;
|
public String partyChatPrefix, noSkillBoundPlaceholder;
|
||||||
public ChatColor staminaFull, staminaHalf, staminaEmpty;
|
public ChatColor staminaFull, staminaHalf, staminaEmpty;
|
||||||
public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown;
|
public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown;
|
||||||
public double lootChestsChanceWeight, fishingDropsChanceWeight;
|
public double lootChestsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange;
|
||||||
public int maxPartyLevelDifference, maxBoundActiveSkills, maxBoundPassiveSkills, waypointWarpTime;
|
public int maxPartyLevelDifference, maxBoundActiveSkills, maxBoundPassiveSkills, waypointWarpTime;
|
||||||
|
|
||||||
private final FileConfiguration messages;
|
private final FileConfiguration messages;
|
||||||
@ -109,6 +109,7 @@ public class ConfigManager {
|
|||||||
lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests");
|
lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests");
|
||||||
fishingDropsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.fishing-drops");
|
fishingDropsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.fishing-drops");
|
||||||
maxPartyLevelDifference = MMOCore.plugin.getConfig().getInt("party.max-level-difference");
|
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");
|
splitProfessionExp = MMOCore.plugin.getConfig().getBoolean("party.profession-exp-split");
|
||||||
disableQuestBossBar = MMOCore.plugin.getConfig().getBoolean("mmocore-quests.disable-boss-bar");
|
disableQuestBossBar = MMOCore.plugin.getConfig().getBoolean("mmocore-quests.disable-boss-bar");
|
||||||
|
|
||||||
|
@ -149,6 +149,11 @@ party:
|
|||||||
# that feature.
|
# that feature.
|
||||||
max-level-difference: 3
|
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
|
# When enabled, being in a party also splits profession exp
|
||||||
profession-exp-split: false
|
profession-exp-split: false
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user