mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 22:56:45 +01:00
Added config options for Rupture and updated the Swords command
This commit is contained in:
parent
48bf79055a
commit
affecfeeeb
@ -1,11 +1,26 @@
|
|||||||
Version 2.1.186
|
Version 2.1.186
|
||||||
Rupture has been reworked to solve a few outstanding issues (see notes)
|
Rupture has been reworked to solve a few outstanding issues (see notes)
|
||||||
Removed 'Skills.Swords.Rupture.MaxTicks' from advanced.yml
|
|
||||||
Removed 'Skills.Swords.Rupture.BaseTicks' from advanced.yml
|
|
||||||
Gore no longer applies Rupture
|
Gore no longer applies Rupture
|
||||||
Gore no longer sends a message to the Wolf owner when it triggers
|
Gore no longer sends a message to the Wolf owner when it triggers
|
||||||
Gore no longer sends a message to players that are hit by it
|
Gore no longer sends a message to players that are hit by it
|
||||||
Rupture no longer sends a message telling you that your target is bleeding
|
Rupture no longer sends a message telling you that your target is bleeding
|
||||||
|
Updated locale string 'Swords.SubSkill.Rupture.Description'
|
||||||
|
Updated locale string 'Swords.SubSkill.Rupture.Stat.Extra'
|
||||||
|
Updated locale string 'Swords.Combat.Rupture.Note'
|
||||||
|
Added 'Skills.Swords.Rupture.Rupture_Mechanics.Chance_To_Apply_On_Hit' to advanced.yml
|
||||||
|
Added 'Skills.Swords.Rupture.Rupture_Mechanics.Duration_In_Seconds.Against_Players' to advanced.yml
|
||||||
|
Added 'Skills.Swords.Rupture.Rupture_Mechanics.Duration_In_Seconds.Against_Mobs' to advanced.yml
|
||||||
|
Added 'Skills.Swords.Rupture.Rupture_Mechanics.Tick_Interval_Damage.Against_Players' to advanced.yml
|
||||||
|
Added 'Skills.Swords.Rupture.Rupture_Mechanics.Tick_Interval_Damage.Against_Mobs' to advanced.yml
|
||||||
|
Added 'Skills.Swords.Rupture.Rupture_Mechanics.Explosion_Damage.Against_Players' to advanced.yml
|
||||||
|
Added 'Skills.Swords.Rupture.Rupture_Mechanics.Explosion_Damage.Against_Mobs' to advanced.yml
|
||||||
|
Removed 'Skills.Swords.Rupture.ChanceMax' from advanced.yml
|
||||||
|
Removed 'Skills.Swords.Rupture.MaxBonusLevel.Standard' from advanced.yml
|
||||||
|
Removed 'Skills.Swords.Rupture.MaxBonusLevel.RetroMode' from advanced.yml
|
||||||
|
Removed 'Skills.Swords.Rupture.MaxTicks' from advanced.yml
|
||||||
|
Removed 'Skills.Swords.Rupture.BaseTicks' from advanced.yml
|
||||||
|
Removed 'Skills.Swords.Rupture.DamagePlayer' from advanced.yml
|
||||||
|
Removed 'Skills.Swords.Rupture.DamageMobs' from advanced.yml
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
The old Rupture would constantly interfere with your ability to do a Sweep Attack/Swipe with swords, the new one solves this problem
|
The old Rupture would constantly interfere with your ability to do a Sweep Attack/Swipe with swords, the new one solves this problem
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
@ -19,15 +20,16 @@ import java.util.List;
|
|||||||
public class SwordsCommand extends SkillCommand {
|
public class SwordsCommand extends SkillCommand {
|
||||||
private String counterChance;
|
private String counterChance;
|
||||||
private String counterChanceLucky;
|
private String counterChanceLucky;
|
||||||
private int bleedLength;
|
|
||||||
private String bleedChance;
|
|
||||||
private String bleedChanceLucky;
|
|
||||||
private String serratedStrikesLength;
|
private String serratedStrikesLength;
|
||||||
private String serratedStrikesLengthEndurance;
|
private String serratedStrikesLengthEndurance;
|
||||||
|
|
||||||
|
private String rupturePureTickDamageAgainstPlayers, rupturePureTickDamageAgainstMobs,
|
||||||
|
ruptureExplosionDamageAgainstPlayers, ruptureExplosionDamageAgainstMobs,
|
||||||
|
ruptureLengthSecondsAgainstPlayers, ruptureLengthSecondsAgainstMobs, ruptureChanceToApply, ruptureChanceToApplyLucky;
|
||||||
|
|
||||||
private boolean canCounter;
|
private boolean canCounter;
|
||||||
private boolean canSerratedStrike;
|
private boolean canSerratedStrike;
|
||||||
private boolean canBleed;
|
private boolean canRupture;
|
||||||
|
|
||||||
public SwordsCommand() {
|
public SwordsCommand() {
|
||||||
super(PrimarySkillType.SWORDS);
|
super(PrimarySkillType.SWORDS);
|
||||||
@ -43,12 +45,19 @@ public class SwordsCommand extends SkillCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SWORDS_RUPTURE
|
// SWORDS_RUPTURE
|
||||||
if (canBleed) {
|
if (canRupture) {
|
||||||
bleedLength = UserManager.getPlayer(player).getSwordsManager().getRuptureBleedTicks();
|
int ruptureRank = RankUtils.getRank(player, SubSkillType.SWORDS_RUPTURE);
|
||||||
|
ruptureLengthSecondsAgainstPlayers = String.valueOf(AdvancedConfig.getInstance().getRuptureDurationSeconds(true));
|
||||||
|
ruptureLengthSecondsAgainstMobs = String.valueOf(AdvancedConfig.getInstance().getRuptureDurationSeconds(false));
|
||||||
|
|
||||||
String[] bleedStrings = getAbilityDisplayValues(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, player, SubSkillType.SWORDS_RUPTURE);
|
rupturePureTickDamageAgainstPlayers = String.valueOf(AdvancedConfig.getInstance().getRuptureTickDamage(true, ruptureRank));
|
||||||
bleedChance = bleedStrings[0];
|
rupturePureTickDamageAgainstMobs = String.valueOf(AdvancedConfig.getInstance().getRuptureTickDamage(false, ruptureRank));
|
||||||
bleedChanceLucky = bleedStrings[1];
|
|
||||||
|
ruptureExplosionDamageAgainstPlayers = String.valueOf(AdvancedConfig.getInstance().getRuptureExplosionDamage(true, ruptureRank));
|
||||||
|
ruptureExplosionDamageAgainstMobs = String.valueOf(AdvancedConfig.getInstance().getRuptureExplosionDamage(false, ruptureRank));
|
||||||
|
|
||||||
|
ruptureChanceToApply = String.valueOf(AdvancedConfig.getInstance().getRuptureChanceToApplyOnHit(ruptureRank));
|
||||||
|
ruptureChanceToApplyLucky = String.valueOf(AdvancedConfig.getInstance().getRuptureChanceToApplyOnHit(ruptureRank) * 1.33);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SERRATED STRIKES
|
// SERRATED STRIKES
|
||||||
@ -61,7 +70,7 @@ public class SwordsCommand extends SkillCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void permissionsCheck(Player player) {
|
protected void permissionsCheck(Player player) {
|
||||||
canBleed = canUseSubskill(player, SubSkillType.SWORDS_RUPTURE);
|
canRupture = canUseSubskill(player, SubSkillType.SWORDS_RUPTURE);
|
||||||
canCounter = canUseSubskill(player, SubSkillType.SWORDS_COUNTER_ATTACK);
|
canCounter = canUseSubskill(player, SubSkillType.SWORDS_COUNTER_ATTACK);
|
||||||
canSerratedStrike = RankUtils.hasUnlockedSubskill(player, SubSkillType.SWORDS_SERRATED_STRIKES) && Permissions.serratedStrikes(player);
|
canSerratedStrike = RankUtils.hasUnlockedSubskill(player, SubSkillType.SWORDS_SERRATED_STRIKES) && Permissions.serratedStrikes(player);
|
||||||
}
|
}
|
||||||
@ -70,22 +79,21 @@ public class SwordsCommand extends SkillCommand {
|
|||||||
protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
|
protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
|
||||||
List<String> messages = new ArrayList<>();
|
List<String> messages = new ArrayList<>();
|
||||||
|
|
||||||
int ruptureTicks = UserManager.getPlayer(player).getSwordsManager().getRuptureBleedTicks();
|
|
||||||
double ruptureDamagePlayers = RankUtils.getRank(player, SubSkillType.SWORDS_RUPTURE) >= 3 ? AdvancedConfig.getInstance().getRuptureDamagePlayer() * 1.5D : AdvancedConfig.getInstance().getRuptureDamagePlayer();
|
|
||||||
double ruptureDamageMobs = RankUtils.getRank(player, SubSkillType.SWORDS_RUPTURE) >= 3 ? AdvancedConfig.getInstance().getRuptureDamageMobs() * 1.5D : AdvancedConfig.getInstance().getRuptureDamageMobs();
|
|
||||||
|
|
||||||
if (canCounter) {
|
if (canCounter) {
|
||||||
messages.add(getStatMessage(SubSkillType.SWORDS_COUNTER_ATTACK, counterChance)
|
messages.add(getStatMessage(SubSkillType.SWORDS_COUNTER_ATTACK, counterChance)
|
||||||
+ (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", counterChanceLucky) : ""));
|
+ (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", counterChanceLucky) : ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canBleed) {
|
if (canRupture) {
|
||||||
messages.add(getStatMessage(SubSkillType.SWORDS_RUPTURE, bleedChance)
|
messages.add(getStatMessage(SubSkillType.SWORDS_RUPTURE, ruptureChanceToApply)
|
||||||
+ (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", bleedChanceLucky) : ""));
|
+ (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", ruptureChanceToApplyLucky) : ""));
|
||||||
messages.add(getStatMessage(true, true, SubSkillType.SWORDS_RUPTURE,
|
messages.add(getStatMessage(true, true, SubSkillType.SWORDS_RUPTURE,
|
||||||
String.valueOf(ruptureTicks),
|
ruptureLengthSecondsAgainstPlayers,
|
||||||
String.valueOf(ruptureDamagePlayers),
|
ruptureLengthSecondsAgainstMobs,
|
||||||
String.valueOf(ruptureDamageMobs)));
|
rupturePureTickDamageAgainstPlayers,
|
||||||
|
rupturePureTickDamageAgainstMobs,
|
||||||
|
ruptureExplosionDamageAgainstPlayers,
|
||||||
|
ruptureExplosionDamageAgainstMobs));
|
||||||
|
|
||||||
messages.add(LocaleLoader.getString("Swords.Combat.Rupture.Note"));
|
messages.add(LocaleLoader.getString("Swords.Combat.Rupture.Note"));
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,9 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
|||||||
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
|
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -310,25 +313,6 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* SWORDS */
|
/* SWORDS */
|
||||||
if (getMaximumProbability(SubSkillType.SWORDS_RUPTURE) < 1) {
|
|
||||||
reason.add("Skills.Swords.Rupture.ChanceMax should be at least 1!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getMaxBonusLevel(SubSkillType.SWORDS_RUPTURE) < 1) {
|
|
||||||
reason.add("Skills.Swords.Rupture.MaxBonusLevel should be at least 1!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getRuptureMaxTicks() < 1) {
|
|
||||||
reason.add("Skills.Swords.Rupture.MaxTicks should be at least 1!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getRuptureMaxTicks() < getRuptureBaseTicks()) {
|
|
||||||
reason.add("Skills.Swords.Rupture.MaxTicks should be at least Skills.Swords.Rupture.BaseTicks!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getRuptureBaseTicks() < 1) {
|
|
||||||
reason.add("Skills.Swords.Rupture.BaseTicks should be at least 1!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getMaximumProbability(SubSkillType.SWORDS_COUNTER_ATTACK) < 1) {
|
if (getMaximumProbability(SubSkillType.SWORDS_COUNTER_ATTACK) < 1) {
|
||||||
reason.add("Skills.Swords.CounterAttack.ChanceMax should be at least 1!");
|
reason.add("Skills.Swords.CounterAttack.ChanceMax should be at least 1!");
|
||||||
@ -665,13 +649,11 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public double getGracefulRollDamageThreshold() { return config.getDouble("Skills.Acrobatics.GracefulRoll.DamageThreshold", 14.0D); }
|
public double getGracefulRollDamageThreshold() { return config.getDouble("Skills.Acrobatics.GracefulRoll.DamageThreshold", 14.0D); }
|
||||||
|
|
||||||
/* ALCHEMY */
|
/* ALCHEMY */
|
||||||
/*public int getCatalysisUnlockLevel() { return config.getInt("Skills.Alchemy.Catalysis.UnlockLevel", 100); }*/
|
|
||||||
public int getCatalysisMaxBonusLevel() { return config.getInt("Skills.Alchemy.Catalysis.MaxBonusLevel", 1000); }
|
public int getCatalysisMaxBonusLevel() { return config.getInt("Skills.Alchemy.Catalysis.MaxBonusLevel", 1000); }
|
||||||
|
|
||||||
public double getCatalysisMinSpeed() { return config.getDouble("Skills.Alchemy.Catalysis.MinSpeed", 1.0D); }
|
public double getCatalysisMinSpeed() { return config.getDouble("Skills.Alchemy.Catalysis.MinSpeed", 1.0D); }
|
||||||
public double getCatalysisMaxSpeed() { return config.getDouble("Skills.Alchemy.Catalysis.MaxSpeed", 4.0D); }
|
public double getCatalysisMaxSpeed() { return config.getDouble("Skills.Alchemy.Catalysis.MaxSpeed", 4.0D); }
|
||||||
|
|
||||||
//public int getConcoctionsTierLevel(Alchemy.Tier tier) { return config.getInt("Skills.Alchemy.Rank_Levels.Rank_" + rank); }
|
|
||||||
|
|
||||||
/* ARCHERY */
|
/* ARCHERY */
|
||||||
public double getSkillShotRankDamageMultiplier() { return config.getDouble("Skills.Archery.SkillShot.RankDamageMultiplier", 10.0D); }
|
public double getSkillShotRankDamageMultiplier() { return config.getDouble("Skills.Archery.SkillShot.RankDamageMultiplier", 10.0D); }
|
||||||
@ -700,7 +682,6 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
//Nothing to configure, everything is already configurable in config.yml
|
//Nothing to configure, everything is already configurable in config.yml
|
||||||
|
|
||||||
/* FISHING */
|
/* FISHING */
|
||||||
//public int getFishingTierLevel(int rank) { return config.getInt("Skills.Fishing.Rank_Levels.Rank_" + rank); }
|
|
||||||
public double getShakeChance(int rank) { return config.getDouble("Skills.Fishing.ShakeChance.Rank_" + rank); }
|
public double getShakeChance(int rank) { return config.getDouble("Skills.Fishing.ShakeChance.Rank_" + rank); }
|
||||||
public int getFishingVanillaXPModifier(int rank) { return config.getInt("Skills.Fishing.VanillaXPMultiplier.Rank_" + rank); }
|
public int getFishingVanillaXPModifier(int rank) { return config.getInt("Skills.Fishing.VanillaXPMultiplier.Rank_" + rank); }
|
||||||
|
|
||||||
@ -712,9 +693,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public int getFishingReductionMaxWaitCap() { return config.getInt("Skills.Fishing.MasterAngler.Tick_Reduction_Caps.Max_Wait", 100);}
|
public int getFishingReductionMaxWaitCap() { return config.getInt("Skills.Fishing.MasterAngler.Tick_Reduction_Caps.Max_Wait", 100);}
|
||||||
public int getFishermanDietRankChange() { return config.getInt("Skills.Fishing.FishermansDiet.RankChange", 200); }
|
public int getFishermanDietRankChange() { return config.getInt("Skills.Fishing.FishermansDiet.RankChange", 200); }
|
||||||
|
|
||||||
/*public int getIceFishingUnlockLevel() { return config.getInt("Skills.Fishing.IceFishing.UnlockLevel", 50); }
|
|
||||||
|
|
||||||
public int getMasterAnglerUnlockLevel() {return config.getInt("Skills.Fishing.MasterAngler.UnlockLevel", 125); }*/
|
|
||||||
public double getMasterAnglerBoatModifier() {return config.getDouble("Skills.Fishing.MasterAngler.BoatModifier", 2.0); }
|
public double getMasterAnglerBoatModifier() {return config.getDouble("Skills.Fishing.MasterAngler.BoatModifier", 2.0); }
|
||||||
public double getMasterAnglerBiomeModifier() {return config.getDouble("Skills.Fishing.MasterAngler.BiomeModifier", 2.0); }
|
public double getMasterAnglerBiomeModifier() {return config.getDouble("Skills.Fishing.MasterAngler.BiomeModifier", 2.0); }
|
||||||
|
|
||||||
@ -737,23 +716,15 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public double getRepairMasteryMaxBonus() { return config.getDouble("Skills.Repair.RepairMastery.MaxBonusPercentage", 200.0D); }
|
public double getRepairMasteryMaxBonus() { return config.getDouble("Skills.Repair.RepairMastery.MaxBonusPercentage", 200.0D); }
|
||||||
public int getRepairMasteryMaxLevel() { return config.getInt("Skills.Repair.RepairMastery.MaxBonusLevel", 100); }
|
public int getRepairMasteryMaxLevel() { return config.getInt("Skills.Repair.RepairMastery.MaxBonusLevel", 100); }
|
||||||
|
|
||||||
/* Arcane Forging */
|
|
||||||
//public int getArcaneForgingRankLevel(int rank) { return config.getInt("Skills.Repair.ArcaneForging.Rank_Levels.Rank_" + rank); }
|
|
||||||
|
|
||||||
public boolean getArcaneForgingEnchantLossEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.May_Lose_Enchants", true); }
|
public boolean getArcaneForgingEnchantLossEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.May_Lose_Enchants", true); }
|
||||||
public double getArcaneForgingKeepEnchantsChance(int rank) { return config.getDouble("Skills.Repair.ArcaneForging.Keep_Enchants_Chance.Rank_" + rank); }
|
public double getArcaneForgingKeepEnchantsChance(int rank) { return config.getDouble("Skills.Repair.ArcaneForging.Keep_Enchants_Chance.Rank_" + rank); }
|
||||||
|
|
||||||
public boolean getArcaneForgingDowngradeEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.Downgrades_Enabled", true); }
|
public boolean getArcaneForgingDowngradeEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.Downgrades_Enabled", true); }
|
||||||
public double getArcaneForgingDowngradeChance(int rank) { return config.getDouble("Skills.Repair.ArcaneForging.Downgrades_Chance.Rank_" + rank); }
|
public double getArcaneForgingDowngradeChance(int rank) { return config.getDouble("Skills.Repair.ArcaneForging.Downgrades_Chance.Rank_" + rank); }
|
||||||
|
|
||||||
/* SALVAGE */
|
|
||||||
//public double getSalvageMaxPercentage() { return config.getDouble("Skills.Salvage.MaxPercentage", 100.0D); }
|
|
||||||
//public int getSalvageMaxPercentageLevel() { return config.getInt("Skills.Salvage.MaxPercentageLevel", 1000); }
|
|
||||||
|
|
||||||
public boolean getArcaneSalvageEnchantDowngradeEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantDowngradeEnabled", true); }
|
public boolean getArcaneSalvageEnchantDowngradeEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantDowngradeEnabled", true); }
|
||||||
public boolean getArcaneSalvageEnchantLossEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantLossEnabled", true); }
|
public boolean getArcaneSalvageEnchantLossEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantLossEnabled", true); }
|
||||||
|
|
||||||
//public int getArcaneSalvageRankLevel(int rank) { return config.getInt("Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + rank); }
|
|
||||||
public double getArcaneSalvageExtractFullEnchantsChance(int rank) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + rank); }
|
public double getArcaneSalvageExtractFullEnchantsChance(int rank) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + rank); }
|
||||||
public double getArcaneSalvageExtractPartialEnchantsChance(int rank) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + rank); }
|
public double getArcaneSalvageExtractPartialEnchantsChance(int rank) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + rank); }
|
||||||
|
|
||||||
@ -765,19 +736,35 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
return config.getInt("Skills.Smelting.FuelEfficiency.Standard.MaxBonusLevel", 100);
|
return config.getInt("Skills.Smelting.FuelEfficiency.Standard.MaxBonusLevel", 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public int getFluxMiningUnlockLevel() { return config.getInt("Skills.Smelting.FluxMining.UnlockLevel", 250); }*/
|
|
||||||
public double getFluxMiningChance() { return config.getDouble("Skills.Smelting.FluxMining.Chance", 33.0D); }
|
public double getFluxMiningChance() { return config.getDouble("Skills.Smelting.FluxMining.Chance", 33.0D); }
|
||||||
|
|
||||||
public int getSmeltingRankLevel(int rank) { return config.getInt("Skills.Smelting.Rank_Levels.Rank_" + rank); }
|
|
||||||
|
|
||||||
public int getSmeltingVanillaXPBoostMultiplier(int rank) { return config.getInt("Skills.Smelting.VanillaXPMultiplier.Rank_" + rank); }
|
|
||||||
|
|
||||||
/* SWORDS */
|
/* SWORDS */
|
||||||
public double getRuptureDamagePlayer() { return config.getDouble("Skills.Swords.Rupture.DamagePlayer", 1.0); }
|
public double getRuptureTickDamage(boolean isTargetPlayer, int rank) {
|
||||||
public double getRuptureDamageMobs() { return config.getDouble("Skills.Swords.Rupture.DamageMobs", 2.0); }
|
String root = "Skills.Swords.Rupture.Rupture_Mechanics.Tick_Interval_Damage.Against_";
|
||||||
|
String targetType = isTargetPlayer ? "Players" : "Mobs";
|
||||||
|
String key = root + targetType + ".Rank_" + rank;
|
||||||
|
|
||||||
public int getRuptureMaxTicks() { return config.getInt("Skills.Swords.Rupture.MaxTicks", 8); }
|
return config.getDouble(key, 1.0D);
|
||||||
public int getRuptureBaseTicks() { return config.getInt("Skills.Swords.Rupture.BaseTicks", 2); }
|
}
|
||||||
|
|
||||||
|
public int getRuptureDurationSeconds(boolean isTargetPlayer) {
|
||||||
|
String root = "Skills.Swords.Rupture.Rupture_Mechanics.Duration_In_Seconds.Against_";
|
||||||
|
String targetType = isTargetPlayer ? "Players" : "Mobs";
|
||||||
|
return config.getInt(root + targetType, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getRuptureExplosionDamage(boolean isTargetPlayer, int rank) {
|
||||||
|
String root = "Skills.Swords.Rupture.Rupture_Mechanics.Explosion_Damage.Against_";
|
||||||
|
String targetType = isTargetPlayer ? "Players" : "Mobs";
|
||||||
|
String key = root + targetType + ".Rank_" + rank;
|
||||||
|
|
||||||
|
return config.getDouble(key, 40.0D);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getRuptureChanceToApplyOnHit(int rank) {
|
||||||
|
String root = "Skills.Swords.Rupture.Rupture_Mechanics.Chance_To_Apply_On_Hit.Rank_";
|
||||||
|
return config.getDouble(root + rank, 33);
|
||||||
|
}
|
||||||
|
|
||||||
public double getCounterModifier() { return config.getDouble("Skills.Swords.CounterAttack.DamageModifier", 2.0D); }
|
public double getCounterModifier() { return config.getDouble("Skills.Swords.CounterAttack.DamageModifier", 2.0D); }
|
||||||
|
|
||||||
@ -785,24 +772,15 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public int getSerratedStrikesTicks() { return config.getInt("Skills.Swords.SerratedStrikes.RuptureTicks", 5); }
|
public int getSerratedStrikesTicks() { return config.getInt("Skills.Swords.SerratedStrikes.RuptureTicks", 5); }
|
||||||
|
|
||||||
/* TAMING */
|
/* TAMING */
|
||||||
//public int getGoreRuptureTicks() { return config.getInt("Skills.Taming.Gore.RuptureTicks", 2); }
|
|
||||||
public double getGoreModifier() { return config.getDouble("Skills.Taming.Gore.Modifier", 2.0D); }
|
public double getGoreModifier() { return config.getDouble("Skills.Taming.Gore.Modifier", 2.0D); }
|
||||||
|
|
||||||
/*public int getFastFoodUnlock() { return config.getInt("Skills.Taming.FastFood.UnlockLevel", 50); }*/
|
|
||||||
public double getFastFoodChance() { return config.getDouble("Skills.Taming.FastFoodService.Chance", 50.0D); }
|
public double getFastFoodChance() { return config.getDouble("Skills.Taming.FastFoodService.Chance", 50.0D); }
|
||||||
public double getPummelChance() { return config.getDouble("Skills.Taming.Pummel.Chance", 10.0D); }
|
public double getPummelChance() { return config.getDouble("Skills.Taming.Pummel.Chance", 10.0D); }
|
||||||
|
|
||||||
//public int getEnviromentallyAwareUnlock() { return config.getInt("Skills.Taming.EnvironmentallyAware.UnlockLevel", 100); }
|
|
||||||
|
|
||||||
/*public int getThickFurUnlock() { return config.getInt("Skills.Taming.ThickFur.UnlockLevel", 250); }*/
|
|
||||||
public double getThickFurModifier() { return config.getDouble("Skills.Taming.ThickFur.Modifier", 2.0D); }
|
public double getThickFurModifier() { return config.getDouble("Skills.Taming.ThickFur.Modifier", 2.0D); }
|
||||||
|
|
||||||
/*public int getHolyHoundUnlock() {return config.getInt("Skills.Taming.HolyHound.UnlockLevel", 375); }*/
|
|
||||||
|
|
||||||
/*public int getShockProofUnlock() { return config.getInt("Skills.Taming.ShockProof.UnlockLevel", 500); }*/
|
|
||||||
public double getShockProofModifier() { return config.getDouble("Skills.Taming.ShockProof.Modifier", 6.0D); }
|
public double getShockProofModifier() { return config.getDouble("Skills.Taming.ShockProof.Modifier", 6.0D); }
|
||||||
|
|
||||||
/*public int getSharpenedClawsUnlock() { return config.getInt("Skills.Taming.SharpenedClaws.UnlockLevel", 750); }*/
|
|
||||||
public double getSharpenedClawsBonus() { return config.getDouble("Skills.Taming.SharpenedClaws.Bonus", 2.0D); }
|
public double getSharpenedClawsBonus() { return config.getDouble("Skills.Taming.SharpenedClaws.Bonus", 2.0D); }
|
||||||
|
|
||||||
public double getMinHorseJumpStrength() { return config.getDouble("Skills.Taming.CallOfTheWild.MinHorseJumpStrength", 0.7D); }
|
public double getMinHorseJumpStrength() { return config.getDouble("Skills.Taming.CallOfTheWild.MinHorseJumpStrength", 0.7D); }
|
||||||
|
@ -1,37 +1,38 @@
|
|||||||
package com.gmail.nossr50.runnables.skills;
|
package com.gmail.nossr50.runnables.skills;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.MobHealthbarUtils;
|
import com.gmail.nossr50.util.MobHealthbarUtils;
|
||||||
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class RuptureTask extends BukkitRunnable {
|
public class RuptureTask extends BukkitRunnable {
|
||||||
|
|
||||||
public static final int FIVE_SECOND_DURATION = 20 * 5;
|
|
||||||
public static final int DAMAGE_TICK_INTERVAL = 10;
|
public static final int DAMAGE_TICK_INTERVAL = 10;
|
||||||
|
|
||||||
private final @NotNull McMMOPlayer ruptureSource;
|
private final @NotNull McMMOPlayer ruptureSource;
|
||||||
private final @NotNull LivingEntity targetEntity;
|
private final @NotNull LivingEntity targetEntity;
|
||||||
private final int ruptureRank;
|
|
||||||
private final int expireTick;
|
private final int expireTick;
|
||||||
|
|
||||||
private int ruptureTick;
|
private int ruptureTick;
|
||||||
private int damageTickTracker;
|
private int damageTickTracker;
|
||||||
private final double damageValue; //TODO: Make configurable
|
private final double pureTickDamage; //TODO: Make configurable
|
||||||
|
private final double explosionDamage; //TODO: Make configurable
|
||||||
|
|
||||||
public RuptureTask(@NotNull McMMOPlayer ruptureSource, @NotNull LivingEntity targetEntity, int ruptureRank, double damageValue) {
|
public RuptureTask(@NotNull McMMOPlayer ruptureSource, @NotNull LivingEntity targetEntity, double pureTickDamage, double explosionDamage) {
|
||||||
this.ruptureSource = ruptureSource;
|
this.ruptureSource = ruptureSource;
|
||||||
this.targetEntity = targetEntity;
|
this.targetEntity = targetEntity;
|
||||||
this.ruptureRank = ruptureRank;
|
this.expireTick = AdvancedConfig.getInstance().getRuptureDurationSeconds(targetEntity instanceof Player);
|
||||||
this.expireTick = FIVE_SECOND_DURATION;
|
|
||||||
this.damageValue = damageValue;
|
|
||||||
|
|
||||||
this.ruptureTick = 0;
|
this.ruptureTick = 0;
|
||||||
this.damageTickTracker = 0;
|
this.damageTickTracker = 0;
|
||||||
|
this.pureTickDamage = pureTickDamage;
|
||||||
|
this.explosionDamage = explosionDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -48,10 +49,11 @@ public class RuptureTask extends BukkitRunnable {
|
|||||||
if(damageTickTracker >= DAMAGE_TICK_INTERVAL) {
|
if(damageTickTracker >= DAMAGE_TICK_INTERVAL) {
|
||||||
damageTickTracker = 0; //Reset
|
damageTickTracker = 0; //Reset
|
||||||
ParticleEffectUtils.playBleedEffect(targetEntity); //Animate
|
ParticleEffectUtils.playBleedEffect(targetEntity); //Animate
|
||||||
|
double finalDamage = 0; //Used for mob health bars and setting last damage
|
||||||
|
|
||||||
if(targetEntity.getHealth() > 0.01) {
|
if(targetEntity.getHealth() > 0.01) {
|
||||||
double healthBeforeRuptureIsApplied = targetEntity.getHealth();
|
double healthBeforeRuptureIsApplied = targetEntity.getHealth();
|
||||||
double damagedHealth = healthBeforeRuptureIsApplied - getTickDamage();
|
double damagedHealth = healthBeforeRuptureIsApplied - calculateAdjustedTickDamage();
|
||||||
|
|
||||||
if(damagedHealth <= 0) {
|
if(damagedHealth <= 0) {
|
||||||
mcMMO.p.getLogger().severe("DEBUG: Miscalculating Rupture tick damage");
|
mcMMO.p.getLogger().severe("DEBUG: Miscalculating Rupture tick damage");
|
||||||
@ -59,10 +61,7 @@ public class RuptureTask extends BukkitRunnable {
|
|||||||
targetEntity.setHealth(damagedHealth); //Hurt entity without the unwanted side effects of damage()
|
targetEntity.setHealth(damagedHealth); //Hurt entity without the unwanted side effects of damage()
|
||||||
|
|
||||||
//TODO: Do we need to set last damage? Double check
|
//TODO: Do we need to set last damage? Double check
|
||||||
double finalDamage = healthBeforeRuptureIsApplied - targetEntity.getHealth();
|
finalDamage = healthBeforeRuptureIsApplied - targetEntity.getHealth();
|
||||||
|
|
||||||
//Update health bars
|
|
||||||
MobHealthbarUtils.handleMobHealthbars(targetEntity, finalDamage, mcMMO.p);
|
|
||||||
|
|
||||||
if(finalDamage <= 0) {
|
if(finalDamage <= 0) {
|
||||||
mcMMO.p.getLogger().severe("DEBUG: Miscalculating final damage for Rupture");
|
mcMMO.p.getLogger().severe("DEBUG: Miscalculating final damage for Rupture");
|
||||||
@ -72,6 +71,9 @@ public class RuptureTask extends BukkitRunnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Update Health bars
|
||||||
|
MobHealthbarUtils.handleMobHealthbars(targetEntity, finalDamage, mcMMO.p);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
explode();
|
explode();
|
||||||
@ -95,8 +97,8 @@ public class RuptureTask extends BukkitRunnable {
|
|||||||
this.cancel(); //Task no longer needed
|
this.cancel(); //Task no longer needed
|
||||||
}
|
}
|
||||||
|
|
||||||
private double getTickDamage() {
|
private double calculateAdjustedTickDamage() {
|
||||||
double tickDamage = damageValue;
|
double tickDamage = pureTickDamage;
|
||||||
|
|
||||||
if(targetEntity.getHealth() <= tickDamage) {
|
if(targetEntity.getHealth() <= tickDamage) {
|
||||||
tickDamage = targetEntity.getHealth() - 0.01;
|
tickDamage = targetEntity.getHealth() - 0.01;
|
||||||
@ -109,9 +111,21 @@ public class RuptureTask extends BukkitRunnable {
|
|||||||
return tickDamage;
|
return tickDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getExplosionDamage() {
|
private double getExplosionDamage() {
|
||||||
//TODO: Balance pass
|
return explosionDamage;
|
||||||
return ruptureRank * 10;
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "RuptureTask{" +
|
||||||
|
"ruptureSource=" + ruptureSource +
|
||||||
|
", targetEntity=" + targetEntity +
|
||||||
|
", expireTick=" + expireTick +
|
||||||
|
", ruptureTick=" + ruptureTick +
|
||||||
|
", damageTickTracker=" + damageTickTracker +
|
||||||
|
", pureTickDamage=" + pureTickDamage +
|
||||||
|
", explosionDamage=" + explosionDamage +
|
||||||
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -119,24 +133,11 @@ public class RuptureTask extends BukkitRunnable {
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
RuptureTask that = (RuptureTask) o;
|
RuptureTask that = (RuptureTask) o;
|
||||||
return ruptureRank == that.ruptureRank && expireTick == that.expireTick && ruptureTick == that.ruptureTick && damageTickTracker == that.damageTickTracker && Double.compare(that.damageValue, damageValue) == 0 && Objects.equal(ruptureSource, that.ruptureSource) && Objects.equal(targetEntity, that.targetEntity);
|
return expireTick == that.expireTick && ruptureTick == that.ruptureTick && damageTickTracker == that.damageTickTracker && Double.compare(that.pureTickDamage, pureTickDamage) == 0 && Double.compare(that.explosionDamage, explosionDamage) == 0 && Objects.equal(ruptureSource, that.ruptureSource) && Objects.equal(targetEntity, that.targetEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hashCode(ruptureSource, targetEntity, ruptureRank, expireTick, ruptureTick, damageTickTracker, damageValue);
|
return Objects.hashCode(ruptureSource, targetEntity, expireTick, ruptureTick, damageTickTracker, pureTickDamage, explosionDamage);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "RuptureTimerTask{" +
|
|
||||||
"ruptureSource=" + ruptureSource +
|
|
||||||
", targetEntity=" + targetEntity +
|
|
||||||
", ruptureRank=" + ruptureRank +
|
|
||||||
", expireTick=" + expireTick +
|
|
||||||
", ruptureTick=" + ruptureTick +
|
|
||||||
", damageTickTracker=" + damageTickTracker +
|
|
||||||
", damageValue=" + damageValue +
|
|
||||||
'}';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,6 @@ package com.gmail.nossr50.skills.swords;
|
|||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
|
|
||||||
public class Swords {
|
public class Swords {
|
||||||
public static int bleedMaxTicks = AdvancedConfig.getInstance().getRuptureMaxTicks();
|
|
||||||
|
|
||||||
public static double counterAttackModifier = AdvancedConfig.getInstance().getCounterModifier();
|
public static double counterAttackModifier = AdvancedConfig.getInstance().getCounterModifier();
|
||||||
|
|
||||||
public static double serratedStrikesModifier = AdvancedConfig.getInstance().getSerratedStrikesModifier();
|
public static double serratedStrikesModifier = AdvancedConfig.getInstance().getSerratedStrikesModifier();
|
||||||
|
@ -89,9 +89,10 @@ public class SwordsManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double tickDamageValue = target instanceof Player ? AdvancedConfig.getInstance().getRuptureDamagePlayer() : AdvancedConfig.getInstance().getRuptureDamageMobs();
|
RuptureTask ruptureTask = new RuptureTask(mmoPlayer, target,
|
||||||
|
AdvancedConfig.getInstance().getRuptureTickDamage(target instanceof Player, getRuptureRank()),
|
||||||
|
AdvancedConfig.getInstance().getRuptureExplosionDamage(target instanceof Player, getRuptureRank()));
|
||||||
|
|
||||||
RuptureTask ruptureTask = new RuptureTask(mmoPlayer, target, RankUtils.getRank(mmoPlayer.getPlayer(), SubSkillType.SWORDS_RUPTURE), tickDamageValue);
|
|
||||||
RuptureTaskMeta ruptureTaskMeta = new RuptureTaskMeta(mcMMO.p, ruptureTask);
|
RuptureTaskMeta ruptureTaskMeta = new RuptureTaskMeta(mcMMO.p, ruptureTask);
|
||||||
|
|
||||||
ruptureTask.runTaskTimer(mcMMO.p, 0, 1);
|
ruptureTask.runTaskTimer(mcMMO.p, 0, 1);
|
||||||
@ -133,8 +134,8 @@ public class SwordsManager extends SkillManager {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getRuptureBleedTicks() {
|
public int getRuptureBleedTicks(boolean isTargetPlayer) {
|
||||||
return RuptureTask.FIVE_SECOND_DURATION / RuptureTask.DAMAGE_TICK_INTERVAL;
|
return AdvancedConfig.getInstance().getRuptureDurationSeconds(isTargetPlayer) / RuptureTask.DAMAGE_TICK_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -454,17 +454,41 @@ Skills:
|
|||||||
###
|
###
|
||||||
Swords:
|
Swords:
|
||||||
Rupture:
|
Rupture:
|
||||||
# ChanceMax: Maximum chance of triggering bleeding
|
Rupture_Mechanics:
|
||||||
# MaxBonusLevel: On this level, the chance to cause Bleeding will be <ChanceMax>
|
# This is % chance, 15 would mean 15% percent of the time
|
||||||
ChanceMax: 33.0
|
Chance_To_Apply_On_Hit:
|
||||||
MaxBonusLevel:
|
Rank_1: 15
|
||||||
Standard: 100
|
Rank_2: 33
|
||||||
RetroMode: 1000
|
Rank_3: 40
|
||||||
|
Rank_4: 66
|
||||||
# DamagePlayer: Bleeding damage dealt to players
|
Duration_In_Seconds:
|
||||||
# DamageMobs: Bleeding damage dealt to mobs
|
Against_Players: 5
|
||||||
DamagePlayer: 2.0
|
Against_Mobs: 5
|
||||||
DamageMobs: 3.0
|
# Tick interval damage is applied twice a second during rupture, it is "pure" and does not get lowered from armor or absorption etc
|
||||||
|
Tick_Interval_Damage:
|
||||||
|
Against_Players:
|
||||||
|
Rank_1: 0.1
|
||||||
|
Rank_2: 0.15
|
||||||
|
Rank_3: 0.2
|
||||||
|
Rank_4: 0.3
|
||||||
|
Against_Mobs:
|
||||||
|
Rank_1: 0.5
|
||||||
|
Rank_2: 0.75
|
||||||
|
Rank_3: 0.9
|
||||||
|
Rank_4: 1
|
||||||
|
# If Rupture runs for 5 seconds without being reapplied, it explodes
|
||||||
|
# this damage is **NOT** pure and is reduced dramatically vs armor/absorption/etc
|
||||||
|
Explosion_Damage:
|
||||||
|
Against_Players:
|
||||||
|
Rank_1: 10
|
||||||
|
Rank_2: 20
|
||||||
|
Rank_3: 30
|
||||||
|
Rank_4: 40
|
||||||
|
Against_Mobs:
|
||||||
|
Rank_1: 10
|
||||||
|
Rank_2: 20
|
||||||
|
Rank_3: 30
|
||||||
|
Rank_4: 40
|
||||||
CounterAttack:
|
CounterAttack:
|
||||||
# ChanceMax: Maximum chance of triggering a counter attack
|
# ChanceMax: Maximum chance of triggering a counter attack
|
||||||
# MaxBonusLevel: On this level, the chance to Counter will be <ChanceMax>
|
# MaxBonusLevel: On this level, the chance to Counter will be <ChanceMax>
|
||||||
|
@ -406,7 +406,7 @@ Anvil.Unbreakable=This item is unbreakable!
|
|||||||
#SWORDS
|
#SWORDS
|
||||||
Swords.Ability.Lower=&7You lower your sword.
|
Swords.Ability.Lower=&7You lower your sword.
|
||||||
Swords.Ability.Ready=&3You &6ready&3 your Sword.
|
Swords.Ability.Ready=&3You &6ready&3 your Sword.
|
||||||
Swords.Combat.Rupture.Note=&7NOTE: &e1 Tick happens every 0.5 seconds!
|
Swords.Combat.Rupture.Note=&7NOTE: Pure tick damage is dealt twice a second during Rupture and bypasses resistances but IS never lethal, an explosion goes off after 5 seconds with is reduced by armor and other resistances.
|
||||||
Swords.Combat.Bleeding.Started=&4 You're bleeding!
|
Swords.Combat.Bleeding.Started=&4 You're bleeding!
|
||||||
Swords.Combat.Bleeding.Stopped=&7The bleeding has &astopped&7!
|
Swords.Combat.Bleeding.Stopped=&7The bleeding has &astopped&7!
|
||||||
Swords.Combat.Bleeding=&a**ENEMY BLEEDING**
|
Swords.Combat.Bleeding=&a**ENEMY BLEEDING**
|
||||||
@ -420,7 +420,7 @@ Swords.SubSkill.SerratedStrikes.Name=Serrated Strikes
|
|||||||
Swords.SubSkill.SerratedStrikes.Description=Deal partial damage in an AOE with a chance to apply Rupture!
|
Swords.SubSkill.SerratedStrikes.Description=Deal partial damage in an AOE with a chance to apply Rupture!
|
||||||
Swords.SubSkill.SerratedStrikes.Stat=Serrated Strikes Length
|
Swords.SubSkill.SerratedStrikes.Stat=Serrated Strikes Length
|
||||||
Swords.SubSkill.Rupture.Name=Rupture
|
Swords.SubSkill.Rupture.Name=Rupture
|
||||||
Swords.SubSkill.Rupture.Description=Apply a powerful bleed DoT
|
Swords.SubSkill.Rupture.Description=A damage over time effect that ends explosively
|
||||||
Swords.SubSkill.Stab.Name=Stab
|
Swords.SubSkill.Stab.Name=Stab
|
||||||
Swords.SubSkill.Stab.Description=Adds bonus damage to your attacks.
|
Swords.SubSkill.Stab.Description=Adds bonus damage to your attacks.
|
||||||
Swords.SubSkill.Stab.Stat=Stab Damage
|
Swords.SubSkill.Stab.Stat=Stab Damage
|
||||||
@ -428,7 +428,7 @@ Swords.SubSkill.SwordsLimitBreak.Name=Swords Limit Break
|
|||||||
Swords.SubSkill.SwordsLimitBreak.Description=Breaking your limits. Increased damage against tough opponents. Intended for PVP, up to server settings for whether or not it will boost damage in PVE.
|
Swords.SubSkill.SwordsLimitBreak.Description=Breaking your limits. Increased damage against tough opponents. Intended for PVP, up to server settings for whether or not it will boost damage in PVE.
|
||||||
Swords.SubSkill.SwordsLimitBreak.Stat=Limit Break Max DMG
|
Swords.SubSkill.SwordsLimitBreak.Stat=Limit Break Max DMG
|
||||||
Swords.SubSkill.Rupture.Stat=Rupture Chance
|
Swords.SubSkill.Rupture.Stat=Rupture Chance
|
||||||
Swords.SubSkill.Rupture.Stat.Extra=Rupture: &a{0} ticks [{1} DMG vs Player] [{2} DMG vs Mobs]
|
Swords.SubSkill.Rupture.Stat.Extra=Rupture: Duration in seconds: &a{0} vs Players, {1} vs Mobs. Pure Tick Damage: {2} vs Players, {3} vs Mobs. Explosion Damage: {4} vs Players, {5} vs Mobs
|
||||||
Swords.Effect.4=Serrated Strikes Rupture+
|
Swords.Effect.4=Serrated Strikes Rupture+
|
||||||
Swords.Effect.5={0} Tick Rupture
|
Swords.Effect.5={0} Tick Rupture
|
||||||
Swords.Listener=Swords:
|
Swords.Listener=Swords:
|
||||||
|
Loading…
Reference in New Issue
Block a user