2012-04-30 15:41:58 +02:00
|
|
|
package com.gmail.nossr50.util;
|
|
|
|
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
|
|
|
import com.gmail.nossr50.config.Config;
|
|
|
|
import com.gmail.nossr50.datatypes.PlayerProfile;
|
2013-01-16 15:08:45 +01:00
|
|
|
import com.gmail.nossr50.locale.LocaleLoader;
|
2013-01-30 17:53:51 +01:00
|
|
|
import com.gmail.nossr50.skills.utilities.SkillType;
|
2012-04-30 15:41:58 +02:00
|
|
|
|
2013-01-26 23:01:55 +01:00
|
|
|
public final class Hardcore {
|
2013-01-25 04:22:02 +01:00
|
|
|
public static double statLossPercentage = Config.getInstance().getHardcoreDeathStatPenaltyPercentage();
|
|
|
|
public static double vampirismStatLeechPercentage = Config.getInstance().getHardcoreVampirismStatLeechPercentage();
|
|
|
|
public static boolean statLossEnabled = Config.getInstance().getHardcoreEnabled();
|
|
|
|
public static boolean vampirismEnabled = Config.getInstance().getHardcoreVampirismEnabled();
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2013-01-26 23:01:55 +01:00
|
|
|
private Hardcore() {}
|
|
|
|
|
2013-01-25 04:22:02 +01:00
|
|
|
public static void invokeStatPenalty(Player player) {
|
|
|
|
if (statLossPercentage <= 0 || statLossPercentage > 100) {
|
2012-06-14 01:22:35 +02:00
|
|
|
return;
|
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
PlayerProfile playerProfile = Users.getProfile(player);
|
|
|
|
int totalLost = 0;
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
for (SkillType skillType : SkillType.values()) {
|
2013-01-24 15:08:30 +01:00
|
|
|
if (skillType.equals(SkillType.ALL) || skillType.isChildSkill()) {
|
2012-04-30 15:41:58 +02:00
|
|
|
continue;
|
2012-06-14 01:22:35 +02:00
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
int playerSkillLevel = playerProfile.getSkillLevel(skillType);
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
//Should we really care about negative skill levels?
|
|
|
|
if (playerSkillLevel <= 0) {
|
|
|
|
continue;
|
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2013-01-25 04:22:02 +01:00
|
|
|
int levelsLost = (int) (playerSkillLevel * (statLossPercentage * 0.01D));
|
2012-06-14 01:22:35 +02:00
|
|
|
totalLost += levelsLost;
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
playerProfile.modifySkill(skillType, playerSkillLevel - levelsLost);
|
2012-04-30 15:41:58 +02:00
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2013-01-16 15:08:45 +01:00
|
|
|
player.sendMessage(LocaleLoader.getString("Hardcore.Player.Loss", new Object[] {totalLost}));
|
2012-04-30 15:41:58 +02:00
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
public static void invokeVampirism(Player killer, Player victim) {
|
2013-01-25 04:22:02 +01:00
|
|
|
if (vampirismStatLeechPercentage <= 0 || vampirismStatLeechPercentage > 100) {
|
2012-06-14 01:22:35 +02:00
|
|
|
return;
|
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
PlayerProfile killerProfile = Users.getProfile(killer);
|
|
|
|
PlayerProfile victimProfile = Users.getProfile(victim);
|
|
|
|
int totalStolen = 0;
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
for (SkillType skillType : SkillType.values()) {
|
2013-01-24 15:08:30 +01:00
|
|
|
if (skillType.equals(SkillType.ALL) || skillType.isChildSkill()) {
|
2012-05-22 08:30:16 +02:00
|
|
|
continue;
|
2012-06-14 01:22:35 +02:00
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
int killerSkillLevel = killerProfile.getSkillLevel(skillType);
|
|
|
|
int victimSkillLevel = victimProfile.getSkillLevel(skillType);
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
//Should we really care about negative skill levels?
|
|
|
|
if (victimSkillLevel <= 0 || victimSkillLevel < killerSkillLevel / 2) {
|
|
|
|
continue;
|
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2013-01-25 04:22:02 +01:00
|
|
|
int levelsStolen = (int) (victimSkillLevel * (vampirismStatLeechPercentage * 0.01D));
|
2012-06-14 01:22:35 +02:00
|
|
|
totalStolen += levelsStolen;
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
killerProfile.modifySkill(skillType, killerSkillLevel + levelsStolen);
|
|
|
|
victimProfile.modifySkill(skillType, victimSkillLevel - levelsStolen);
|
2012-05-01 17:47:57 +02:00
|
|
|
}
|
2012-06-05 15:57:10 +02:00
|
|
|
|
2012-06-14 01:22:35 +02:00
|
|
|
if (totalStolen > 0) {
|
2013-02-02 08:55:49 +01:00
|
|
|
killer.sendMessage(LocaleLoader.getString("Vampirism.Killer.Success", totalStolen, victim.getName()));
|
|
|
|
victim.sendMessage(LocaleLoader.getString("Vampirism.Victim.Success", killer.getName(), totalStolen));
|
2012-06-14 01:22:35 +02:00
|
|
|
}
|
|
|
|
else {
|
2013-02-02 08:55:49 +01:00
|
|
|
killer.sendMessage(LocaleLoader.getString("Vampirism.Killer.Failure", victim.getName()));
|
|
|
|
victim.sendMessage(LocaleLoader.getString("Vampirism.Victim.Failure", killer.getName()));
|
2012-05-22 08:56:08 +02:00
|
|
|
}
|
2012-05-01 17:47:57 +02:00
|
|
|
}
|
2012-04-30 15:41:58 +02:00
|
|
|
}
|