mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 13:16:45 +01:00
Bleed doesn't suck anymore.
This commit is contained in:
parent
848cee18a9
commit
11c8374f6c
@ -22,6 +22,7 @@ Version 2.1.0
|
||||
+ (Sounds) Activating Super abilities plays a sound (other plays can hear this)
|
||||
+ (Sounds) Skill Unlock Notifications have sounds
|
||||
+ (Sounds) Readying a tool for a super ability now plays a sound
|
||||
+ (Sounds) Bleed DOT now plays a sound
|
||||
+ (Experience) mcMMO now notifies you when you progress in a skill!
|
||||
+ (Experience) Coral (blocks) now give Mining XP
|
||||
+ (Experience) Coral (plants) now give Herbalism XP
|
||||
@ -32,6 +33,13 @@ Version 2.1.0
|
||||
+ (Events) Starting an XP event will now use the title API (toggle this in advanced.yml)
|
||||
+ (Sound) Volume and Pitch of sounds can now be configured in the new sounds.yml file
|
||||
+ (MySQL) Added support for SSL for MySQL/MariaDB (On by default)
|
||||
! (Skills) Taming's Gore now uses Bleed Rank 1 for its DoT
|
||||
! (Skills) Sword's Rupture now ticks four times as fast
|
||||
! (Skills) Sword's Bleed has been renamed to Rupture
|
||||
! (Skills) Sword's Rupture now reaches its max proc chance at level 20 (200 in Retro)
|
||||
! (Skills) Sword's Rupture now has a max chance to proc of 33% instead of 70%
|
||||
! (Skills) Sword's Rupture now deals 50% more damage at above Rank 3 and can last much longer! The base damage for Bleed has been increased as well (update your advanced.yml admins)
|
||||
! (Skills) Sword's Rupture no longer triggers invincibility frames when damaging your opponent
|
||||
+ (Skills) Ability Lengths now have a default skill cap at which they stop increasing in length, configurable in advanced.yml
|
||||
+ (Skills) Added a new subskill to some skills 'Understanding The Art' this adds nothing new, but tracks benefits that increase together that seemed unrelated, which was previously a bit obfuscated.
|
||||
+ (Skills) Tool alerts now are sent to the Action Bar
|
||||
@ -89,6 +97,7 @@ Version 2.1.0
|
||||
! (Skills) Acrobatics' Roll & Gracefull Roll are now considered the same skill (both mechanics are still there)
|
||||
! (Skills) Woodcutting's Double Drop subskill is now named Harvest Lumber
|
||||
! (Skills) Archery's Skill Shot now uses a rank system
|
||||
! (Skills) Swords' Bleed now uses a rank system
|
||||
! (Skills) Axe's Axe Mastery now uses a rank system
|
||||
! (Skills) Axe's Impact now uses a rank system
|
||||
! (Skills) Herbalism's Farmer's Diet now uses a rank system
|
||||
|
@ -7,6 +7,7 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.skills.swords.Swords;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.TextComponentFactory;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -40,11 +41,11 @@ public class SwordsCommand extends SkillCommand {
|
||||
serratedStrikesLengthEndurance = serratedStrikesStrings[1];
|
||||
}
|
||||
|
||||
// SWORDS_BLEED
|
||||
// SWORDS_RUPTURE
|
||||
if (canBleed) {
|
||||
bleedLength = (skillValue >= AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.SWORDS_BLEED)) ? Swords.bleedMaxTicks : Swords.bleedBaseTicks;
|
||||
bleedLength = (skillValue >= AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.SWORDS_RUPTURE)) ? Swords.bleedMaxTicks : Swords.bleedBaseTicks;
|
||||
|
||||
String[] bleedStrings = calculateAbilityDisplayValues(skillValue, SubSkillType.SWORDS_BLEED, isLucky);
|
||||
String[] bleedStrings = calculateAbilityDisplayValues(skillValue, SubSkillType.SWORDS_RUPTURE, isLucky);
|
||||
bleedChance = bleedStrings[0];
|
||||
bleedChanceLucky = bleedStrings[1];
|
||||
}
|
||||
@ -59,7 +60,7 @@ public class SwordsCommand extends SkillCommand {
|
||||
|
||||
@Override
|
||||
protected void permissionsCheck(Player player) {
|
||||
canBleed = canUseSubskill(player, SubSkillType.SWORDS_BLEED);
|
||||
canBleed = canUseSubskill(player, SubSkillType.SWORDS_RUPTURE);
|
||||
canCounter = canUseSubskill(player, SubSkillType.SWORDS_COUNTER_ATTACK);
|
||||
canSerratedStrike = RankUtils.hasUnlockedSubskill(player, SubSkillType.SWORDS_SERRATED_STRIKES) && Permissions.serratedStrikes(player);
|
||||
}
|
||||
@ -88,17 +89,24 @@ public class SwordsCommand extends SkillCommand {
|
||||
protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
|
||||
List<String> messages = new ArrayList<String>();
|
||||
|
||||
int ruptureTicks = UserManager.getPlayer(player).getSwordsManager().getBleedTicks();
|
||||
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) {
|
||||
messages.add(getStatMessage(SubSkillType.SWORDS_COUNTER_ATTACK, counterChance)
|
||||
+ (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", counterChanceLucky) : ""));
|
||||
}
|
||||
|
||||
if (canBleed) {
|
||||
messages.add(getStatMessage(SubSkillType.SWORDS_BLEED, bleedChance)
|
||||
messages.add(getStatMessage(SubSkillType.SWORDS_RUPTURE, bleedChance)
|
||||
+ (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", bleedChanceLucky) : ""));
|
||||
messages.add(getStatMessage(true, true, SubSkillType.SWORDS_BLEED, String.valueOf(bleedLength)));
|
||||
messages.add(getStatMessage(true, true, SubSkillType.SWORDS_RUPTURE,
|
||||
String.valueOf(ruptureTicks),
|
||||
String.valueOf(ruptureDamagePlayers),
|
||||
String.valueOf(ruptureDamageMobs)));
|
||||
|
||||
messages.add(LocaleLoader.getString("Swords.Combat.Bleed.Note"));
|
||||
messages.add(LocaleLoader.getString("Swords.Combat.Rupture.Note"));
|
||||
}
|
||||
|
||||
if (canSerratedStrike) {
|
||||
|
@ -486,24 +486,24 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
||||
}*/
|
||||
|
||||
/* SWORDS */
|
||||
if (getMaxChance(SubSkillType.SWORDS_BLEED) < 1) {
|
||||
reason.add("Skills.Swords.Bleed.ChanceMax should be at least 1!");
|
||||
if (getMaxChance(SubSkillType.SWORDS_RUPTURE) < 1) {
|
||||
reason.add("Skills.Swords.Rupture.ChanceMax should be at least 1!");
|
||||
}
|
||||
|
||||
if (getMaxBonusLevel(SubSkillType.SWORDS_BLEED) < 1) {
|
||||
reason.add("Skills.Swords.Bleed.MaxBonusLevel should be at least 1!");
|
||||
if (getMaxBonusLevel(SubSkillType.SWORDS_RUPTURE) < 1) {
|
||||
reason.add("Skills.Swords.Rupture.MaxBonusLevel should be at least 1!");
|
||||
}
|
||||
|
||||
if (getBleedMaxTicks() < 1) {
|
||||
reason.add("Skills.Swords.Bleed.MaxTicks should be at least 1!");
|
||||
if (getRuptureMaxTicks() < 1) {
|
||||
reason.add("Skills.Swords.Rupture.MaxTicks should be at least 1!");
|
||||
}
|
||||
|
||||
if (getBleedMaxTicks() < getBleedBaseTicks()) {
|
||||
reason.add("Skills.Swords.Bleed.MaxTicks should be at least Skills.Swords.Bleed.BaseTicks!");
|
||||
if (getRuptureMaxTicks() < getRuptureBaseTicks()) {
|
||||
reason.add("Skills.Swords.Rupture.MaxTicks should be at least Skills.Swords.Rupture.BaseTicks!");
|
||||
}
|
||||
|
||||
if (getBleedBaseTicks() < 1) {
|
||||
reason.add("Skills.Swords.Bleed.BaseTicks should be at least 1!");
|
||||
if (getRuptureBaseTicks() < 1) {
|
||||
reason.add("Skills.Swords.Rupture.BaseTicks should be at least 1!");
|
||||
}
|
||||
|
||||
if (getMaxChance(SubSkillType.SWORDS_COUNTER_ATTACK) < 1) {
|
||||
@ -523,7 +523,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
||||
}
|
||||
|
||||
if (getSerratedStrikesTicks() < 1) {
|
||||
reason.add("Skills.Swords.SerratedStrikes.BleedTicks should be at least 1!");
|
||||
reason.add("Skills.Swords.SerratedStrikes.RuptureTicks should be at least 1!");
|
||||
}
|
||||
|
||||
/* TAMING */
|
||||
@ -536,8 +536,8 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
||||
reason.add("Skills.Taming.Gore.MaxBonusLevel should be at least 1!");
|
||||
}
|
||||
|
||||
if (getGoreBleedTicks() < 1) {
|
||||
reason.add("Skills.Taming.Gore.BleedTicks should be at least 1!");
|
||||
if (getGoreRuptureTicks() < 1) {
|
||||
reason.add("Skills.Taming.Gore.RuptureTicks should be at least 1!");
|
||||
}
|
||||
|
||||
if (getGoreModifier() < 1) {
|
||||
@ -922,19 +922,19 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
||||
public int getSmeltingVanillaXPBoostMultiplier(int rank) { return config.getInt("Skills.Smelting.VanillaXPMultiplier.Rank_" + rank); }
|
||||
|
||||
/* SWORDS */
|
||||
public double getBleedDamagePlayer() { return config.getDouble("Skills.Swords.Bleed.DamagePlayer", 1.0); }
|
||||
public double getBleedDamageMobs() { return config.getDouble("Skills.Swords.Bleed.DamageMobs", 2.0); }
|
||||
public double getRuptureDamagePlayer() { return config.getDouble("Skills.Swords.Rupture.DamagePlayer", 1.0); }
|
||||
public double getRuptureDamageMobs() { return config.getDouble("Skills.Swords.Rupture.DamageMobs", 2.0); }
|
||||
|
||||
public int getBleedMaxTicks() { return config.getInt("Skills.Swords.Bleed.MaxTicks", 3); }
|
||||
public int getBleedBaseTicks() { return config.getInt("Skills.Swords.Bleed.BaseTicks", 2); }
|
||||
public int getRuptureMaxTicks() { return config.getInt("Skills.Swords.Rupture.MaxTicks", 3); }
|
||||
public int getRuptureBaseTicks() { return config.getInt("Skills.Swords.Rupture.BaseTicks", 2); }
|
||||
|
||||
public double getCounterModifier() { return config.getDouble("Skills.Swords.CounterAttack.DamageModifier", 2.0D); }
|
||||
|
||||
public double getSerratedStrikesModifier() { return config.getDouble("Skills.Swords.SerratedStrikes.DamageModifier", 4.0D); }
|
||||
public int getSerratedStrikesTicks() { return config.getInt("Skills.Swords.SerratedStrikes.BleedTicks", 5); }
|
||||
public int getSerratedStrikesTicks() { return config.getInt("Skills.Swords.SerratedStrikes.RuptureTicks", 5); }
|
||||
|
||||
/* TAMING */
|
||||
public int getGoreBleedTicks() { return config.getInt("Skills.Taming.Gore.BleedTicks", 2); }
|
||||
public int getGoreRuptureTicks() { return config.getInt("Skills.Taming.Gore.RuptureTicks", 2); }
|
||||
public double getGoreModifier() { return config.getDouble("Skills.Taming.Gore.Modifier", 2.0D); }
|
||||
|
||||
/*public int getFastFoodUnlock() { return config.getInt("Skills.Taming.FastFood.UnlockLevel", 50); }*/
|
||||
|
@ -46,7 +46,7 @@ public enum PrimarySkillType {
|
||||
REPAIR(RepairManager.class, Color.SILVER, ImmutableList.of(SubSkillType.REPAIR_ARCANE_FORGING, SubSkillType.REPAIR_REPAIR_MASTERY, SubSkillType.REPAIR_SUPER_REPAIR)),
|
||||
SALVAGE(SalvageManager.class, Color.ORANGE, ImmutableList.of(SubSkillType.SALVAGE_ADVANCED_SALVAGE, SubSkillType.SALVAGE_ARCANE_SALVAGE)),
|
||||
SMELTING(SmeltingManager.class, Color.YELLOW, ImmutableList.of(SubSkillType.SMELTING_UNDERSTANDING_THE_ART, SubSkillType.SMELTING_FLUX_MINING, SubSkillType.SMELTING_FUEL_EFFICIENCY, SubSkillType.SMELTING_SECOND_SMELT)),
|
||||
SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbilityType.SERRATED_STRIKES, ToolType.SWORD, ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_BLEED, SubSkillType.SWORDS_COUNTER_ATTACK)),
|
||||
SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbilityType.SERRATED_STRIKES, ToolType.SWORD, ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_RUPTURE, SubSkillType.SWORDS_COUNTER_ATTACK)),
|
||||
TAMING(TamingManager.class, Color.PURPLE, ImmutableList.of(SubSkillType.TAMING_BEAST_LORE, SubSkillType.TAMING_CALL_OF_THE_WILD, SubSkillType.TAMING_ENVIRONMENTALLY_AWARE, SubSkillType.TAMING_FAST_FOOD_SERVICE, SubSkillType.TAMING_GORE, SubSkillType.TAMING_HOLY_HOUND, SubSkillType.TAMING_SHARPENED_CLAWS, SubSkillType.TAMING_SHOCK_PROOF, SubSkillType.TAMING_THICK_FUR, SubSkillType.TAMING_PUMMEL)),
|
||||
UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS, ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)),
|
||||
WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ToolType.AXE, ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_BARK_SURGEON, SubSkillType.WOODCUTTING_SPLINTER, SubSkillType.WOODCUTTING_NATURES_BOUNTY, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER));
|
||||
|
@ -69,7 +69,7 @@ public enum SubSkillType {
|
||||
SMELTING_UNDERSTANDING_THE_ART(8),
|
||||
|
||||
/* Swords */
|
||||
SWORDS_BLEED,
|
||||
SWORDS_RUPTURE(4),
|
||||
SWORDS_COUNTER_ATTACK,
|
||||
SWORDS_SERRATED_STRIKES(1),
|
||||
|
||||
|
@ -498,7 +498,7 @@ public class mcMMO extends JavaPlugin {
|
||||
new CleanBackupsTask().runTaskAsynchronously(mcMMO.p);
|
||||
|
||||
// Bleed timer (Runs every two seconds)
|
||||
new BleedTimerTask().runTaskTimer(this, 2 * Misc.TICK_CONVERSION_FACTOR, 2 * Misc.TICK_CONVERSION_FACTOR);
|
||||
new BleedTimerTask().runTaskTimer(this, 1 * Misc.TICK_CONVERSION_FACTOR, 1 * (Misc.TICK_CONVERSION_FACTOR / 2));
|
||||
|
||||
// Old & Powerless User remover
|
||||
long purgeIntervalTicks = Config.getInstance().getPurgeInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
|
||||
|
@ -5,6 +5,8 @@ import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||
import com.gmail.nossr50.util.player.NotificationManager;
|
||||
import com.gmail.nossr50.util.skills.CombatUtils;
|
||||
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||
import com.gmail.nossr50.util.sounds.SoundManager;
|
||||
import com.gmail.nossr50.util.sounds.SoundType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
@ -17,6 +19,7 @@ import java.util.Map.Entry;
|
||||
public class BleedTimerTask extends BukkitRunnable {
|
||||
private final static int MAX_BLEED_TICKS = 10;
|
||||
private static Map<LivingEntity, Integer> bleedList = new HashMap<LivingEntity, Integer>();
|
||||
private static Map<LivingEntity, Integer> bleedDamage = new HashMap<LivingEntity, Integer>();
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
@ -31,8 +34,16 @@ public class BleedTimerTask extends BukkitRunnable {
|
||||
|
||||
double damage;
|
||||
|
||||
//Play Bleed Sound
|
||||
SoundManager.worldSendSound(entity.getWorld(), entity.getLocation(), SoundType.BLEED);
|
||||
|
||||
if (entity instanceof Player) {
|
||||
damage = AdvancedConfig.getInstance().getBleedDamagePlayer();
|
||||
damage = AdvancedConfig.getInstance().getRuptureDamagePlayer();
|
||||
|
||||
//Above Bleed Rank 3 deals 50% more damage
|
||||
if(bleedDamage.get(entity) >= 3)
|
||||
damage = damage * 1.5;
|
||||
|
||||
Player player = (Player) entity;
|
||||
|
||||
if (!player.isOnline()) {
|
||||
@ -52,7 +63,7 @@ public class BleedTimerTask extends BukkitRunnable {
|
||||
}
|
||||
}
|
||||
else {
|
||||
damage = AdvancedConfig.getInstance().getBleedDamageMobs();
|
||||
damage = AdvancedConfig.getInstance().getRuptureDamageMobs();
|
||||
|
||||
// Anticipate the entity's death to prevent CME because of our EntityDeathEvent listener
|
||||
if (entity.getHealth() - damage > 0) {
|
||||
@ -75,8 +86,9 @@ public class BleedTimerTask extends BukkitRunnable {
|
||||
*/
|
||||
public static void bleedOut(LivingEntity entity) {
|
||||
if (bleedList.containsKey(entity)) {
|
||||
CombatUtils.dealDamage(entity, bleedList.get(entity) * 2);
|
||||
CombatUtils.dealNoInvulnerabilityTickDamage(entity, bleedList.get(entity) * 2, null);
|
||||
bleedList.remove(entity);
|
||||
bleedDamage.remove(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,6 +100,7 @@ public class BleedTimerTask extends BukkitRunnable {
|
||||
public static void remove(LivingEntity entity) {
|
||||
if (bleedList.containsKey(entity)) {
|
||||
bleedList.remove(entity);
|
||||
bleedDamage.remove(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@ -97,15 +110,20 @@ public class BleedTimerTask extends BukkitRunnable {
|
||||
* @param entity LivingEntity to add
|
||||
* @param ticks Number of bleeding ticks
|
||||
*/
|
||||
public static void add(LivingEntity entity, int ticks) {
|
||||
public static void add(LivingEntity entity, int ticks, int bleedRank) {
|
||||
int newTicks = ticks;
|
||||
|
||||
if (bleedList.containsKey(entity)) {
|
||||
newTicks += bleedList.get(entity);
|
||||
bleedList.put(entity, Math.min(newTicks, MAX_BLEED_TICKS));
|
||||
|
||||
//Override the current bleed rank only if this one is higher
|
||||
if(bleedDamage.get(entity) < bleedRank)
|
||||
bleedDamage.put(entity, bleedRank);
|
||||
}
|
||||
else {
|
||||
bleedList.put(entity, Math.min(newTicks, MAX_BLEED_TICKS));
|
||||
bleedDamage.put(entity, bleedRank);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,8 +3,8 @@ package com.gmail.nossr50.skills.swords;
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
|
||||
public class Swords {
|
||||
public static int bleedMaxTicks = AdvancedConfig.getInstance().getBleedMaxTicks();
|
||||
public static int bleedBaseTicks = AdvancedConfig.getInstance().getBleedBaseTicks();
|
||||
public static int bleedMaxTicks = AdvancedConfig.getInstance().getRuptureMaxTicks();
|
||||
public static int bleedBaseTicks = AdvancedConfig.getInstance().getRuptureBaseTicks();
|
||||
|
||||
public static double counterAttackModifier = AdvancedConfig.getInstance().getCounterModifier();
|
||||
|
||||
|
@ -13,6 +13,7 @@ import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.NotificationManager;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.CombatUtils;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillActivationType;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -32,7 +33,7 @@ public class SwordsManager extends SkillManager {
|
||||
}
|
||||
|
||||
public boolean canUseBleed() {
|
||||
return Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.SWORDS_BLEED);
|
||||
return Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.SWORDS_RUPTURE);
|
||||
}
|
||||
|
||||
public boolean canUseCounterAttack(Entity target) {
|
||||
@ -49,13 +50,13 @@ public class SwordsManager extends SkillManager {
|
||||
* @param target The defending entity
|
||||
*/
|
||||
public void bleedCheck(LivingEntity target) {
|
||||
if (SkillUtils.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.SWORDS_BLEED, getPlayer(), this.skill, getSkillLevel(), activationChance)) {
|
||||
if (SkillUtils.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.SWORDS_RUPTURE, getPlayer(), this.skill, getSkillLevel(), activationChance)) {
|
||||
|
||||
if (getSkillLevel() >= AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.SWORDS_BLEED)) {
|
||||
BleedTimerTask.add(target, Swords.bleedMaxTicks);
|
||||
if (getSkillLevel() >= AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.SWORDS_RUPTURE)) {
|
||||
BleedTimerTask.add(target, getBleedTicks(), RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE));
|
||||
}
|
||||
else {
|
||||
BleedTimerTask.add(target, Swords.bleedBaseTicks);
|
||||
BleedTimerTask.add(target, getBleedTicks(), RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE));
|
||||
}
|
||||
|
||||
if (mcMMOPlayer.useChatNotifications()) {
|
||||
@ -72,6 +73,16 @@ public class SwordsManager extends SkillManager {
|
||||
}
|
||||
}
|
||||
|
||||
public int getBleedTicks()
|
||||
{
|
||||
int bleedTicks = 2 * RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE);
|
||||
|
||||
if(bleedTicks > Swords.bleedMaxTicks)
|
||||
bleedTicks = Swords.bleedMaxTicks;
|
||||
|
||||
return bleedTicks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the effects of the Counter Attack ability
|
||||
*
|
||||
@ -98,6 +109,6 @@ public class SwordsManager extends SkillManager {
|
||||
*/
|
||||
public void serratedStrikes(LivingEntity target, double damage, Map<DamageModifier, Double> modifiers) {
|
||||
CombatUtils.applyAbilityAoE(getPlayer(), target, damage / Swords.serratedStrikesModifier, modifiers, skill);
|
||||
BleedTimerTask.add(target, Swords.serratedStrikesBleedTicks);
|
||||
BleedTimerTask.add(target, Swords.serratedStrikesBleedTicks, RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE));
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ public class Taming {
|
||||
public static int fastFoodServiceUnlockLevel = RankUtils.getUnlockLevel(SubSkillType.TAMING_FAST_FOOD_SERVICE);
|
||||
public static double fastFoodServiceActivationChance = AdvancedConfig.getInstance().getFastFoodChance();
|
||||
|
||||
public static int goreBleedTicks = AdvancedConfig.getInstance().getGoreBleedTicks();
|
||||
public static int goreBleedTicks = AdvancedConfig.getInstance().getGoreRuptureTicks();
|
||||
public static double goreModifier = AdvancedConfig.getInstance().getGoreModifier();
|
||||
|
||||
public static int sharpenedClawsUnlockLevel = RankUtils.getUnlockLevel(SubSkillType.TAMING_SHARPENED_CLAWS);
|
||||
|
@ -111,7 +111,7 @@ public class TamingManager extends SkillManager {
|
||||
return 0;
|
||||
}
|
||||
|
||||
BleedTimerTask.add(target, Taming.goreBleedTicks);
|
||||
BleedTimerTask.add(target, Taming.goreBleedTicks, 1);
|
||||
|
||||
if (target instanceof Player) {
|
||||
NotificationManager.sendPlayerInformation((Player)target, NotificationType.SUBSKILL_MESSAGE, "Combat.StruckByGore");
|
||||
|
@ -4,6 +4,7 @@ import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
|
||||
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
|
||||
@ -375,6 +376,18 @@ public final class CombatUtils {
|
||||
target.damage(callFakeDamageEvent(attacker, target, cause, damage));
|
||||
}
|
||||
|
||||
public static void dealNoInvulnerabilityTickDamage(LivingEntity target, double damage, Entity attacker) {
|
||||
if (target.isDead()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//target.damage(callFakeDamageEvent(attacker, target, cause, damage));
|
||||
double incDmg = callFakeDamageEvent(attacker, target, DamageCause.CUSTOM, damage);
|
||||
|
||||
if(incDmg > 0)
|
||||
target.setHealth(incDmg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply Area-of-Effect ability actions.
|
||||
*
|
||||
@ -405,7 +418,7 @@ public final class CombatUtils {
|
||||
NotificationManager.sendPlayerInformation((Player)entity, NotificationType.SUBSKILL_MESSAGE, "Swords.Combat.SS.Struck");
|
||||
}
|
||||
|
||||
BleedTimerTask.add(livingEntity, Swords.serratedStrikesBleedTicks);
|
||||
BleedTimerTask.add(livingEntity, Swords.serratedStrikesBleedTicks, RankUtils.getRank(attacker, SubSkillType.SWORDS_RUPTURE));
|
||||
break;
|
||||
|
||||
case AXES:
|
||||
|
@ -93,6 +93,8 @@ public class SoundManager {
|
||||
return Sound.ENTITY_ENDER_EYE_DEATH;
|
||||
case TIRED:
|
||||
return Sound.BLOCK_CONDUIT_AMBIENT;
|
||||
case BLEED:
|
||||
return Sound.ENTITY_ENDER_EYE_DEATH;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ public enum SoundType {
|
||||
TOOL_READY,
|
||||
ABILITY_ACTIVATED_GENERIC,
|
||||
ABILITY_ACTIVATED_BERSERK,
|
||||
BLEED,
|
||||
TIRED;
|
||||
|
||||
public boolean usesCustomPitch()
|
||||
|
@ -442,19 +442,19 @@ Skills:
|
||||
# Settings for Swords
|
||||
###
|
||||
Swords:
|
||||
Bleed:
|
||||
Rupture:
|
||||
# ChanceMax: Maximum chance of triggering bleeding
|
||||
# MaxBonusLevel: On this level, the chance to cause Bleeding will be <ChanceMax>
|
||||
ChanceMax: 75.0
|
||||
MaxBonusLevel: 75
|
||||
ChanceMax: 33.0
|
||||
MaxBonusLevel: 20
|
||||
|
||||
# DamagePlayer: Bleeding damage dealt to players
|
||||
# DamageMobs: Bleeding damage dealt to mobs
|
||||
DamagePlayer: 1.0
|
||||
DamageMobs: 2.0
|
||||
DamagePlayer: 2.0
|
||||
DamageMobs: 3.0
|
||||
|
||||
# These settings determine how long the Bleeding effect lasts
|
||||
MaxTicks: 3
|
||||
MaxTicks: 8
|
||||
BaseTicks: 2
|
||||
|
||||
CounterAttack:
|
||||
|
@ -383,7 +383,7 @@ Anvil.Unbreakable=This item is unbreakable!
|
||||
#SWORDS
|
||||
Swords.Ability.Lower=[[GRAY]]You lower your sword.
|
||||
Swords.Ability.Ready=[[DARK_AQUA]]You [[GOLD]]ready[[DARK_AQUA]] your Sword.
|
||||
Swords.Combat.Bleed.Note=[[GRAY]]NOTE: [[YELLOW]]1 Tick happens every 2 seconds
|
||||
Swords.Combat.Rupture.Note=[[GRAY]]NOTE: [[YELLOW]]1 Tick happens every 0.5 seconds!
|
||||
Swords.Combat.Bleeding.Started=[[DARK_RED]] You're bleeding!
|
||||
Swords.Combat.Bleeding.Stopped=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
Swords.Combat.Bleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
@ -396,12 +396,12 @@ Swords.SubSkill.CounterAttack.Stat=Counter Attack Chance
|
||||
Swords.SubSkill.SerratedStrikes.Name=Serrated Strikes
|
||||
Swords.SubSkill.SerratedStrikes.Description={0} DMG AoE, Bleed+ AoE
|
||||
Swords.SubSkill.SerratedStrikes.Stat=Serrated Strikes Length
|
||||
Swords.SubSkill.Bleed.Name=Bleed
|
||||
Swords.SubSkill.Bleed.Description=Apply a bleed DoT
|
||||
Swords.SubSkill.Bleed.Stat=Bleed Chance
|
||||
Swords.SubSkill.Bleed.Stat.Extra=Bleed Length: [[GREEN]]{0} ticks
|
||||
Swords.Effect.4=Serrated Strikes Bleed+
|
||||
Swords.Effect.5={0} Tick Bleed
|
||||
Swords.SubSkill.Rupture.Name=Rupture
|
||||
Swords.SubSkill.Rupture.Description=Apply a powerful bleed DoT
|
||||
Swords.SubSkill.Rupture.Stat=Rupture Chance
|
||||
Swords.SubSkill.Rupture.Stat.Extra=Rupture: [[GREEN]]{0} ticks [{1} DMG vs Player] [{2} DMG vs Mobs]
|
||||
Swords.Effect.4=Serrated Strikes Rupture+
|
||||
Swords.Effect.5={0} Tick Rupture
|
||||
Swords.Listener=Swords:
|
||||
Swords.SkillName=SWORDS
|
||||
Swords.Skills.SS.Off=**Serrated Strikes has worn off**
|
||||
@ -441,7 +441,7 @@ Taming.SubSkill.FastFoodService.Description=Chance for wolves to heal on attack
|
||||
Taming.SubSkill.HolyHound.Name=Holy Hound
|
||||
Taming.SubSkill.HolyHound.Description=Healed by Magic & Poison
|
||||
Taming.SubSkill.Gore.Name=Gore
|
||||
Taming.SubSkill.Gore.Description=Critical Strike that applies Bleed
|
||||
Taming.SubSkill.Gore.Description=Critical Strike that applies Rupture
|
||||
Taming.SubSkill.SharpenedClaws.Name=Sharpened Claws
|
||||
Taming.SubSkill.SharpenedClaws.Description=Damage Bonus
|
||||
Taming.SubSkill.EnvironmentallyAware.Name=Environmentally Aware
|
||||
@ -886,7 +886,7 @@ Guides.Smelting.Section.0=Coming soon...
|
||||
Guides.Swords.Section.0=[[DARK_AQUA]]About Swords:\n[[YELLOW]]This skill awards combat bonuses to anyone fighting with a\n[[YELLOW]]sword.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]XP is gained based on the amount of damage dealt to mobs or \n[[YELLOW]]other players when wielding a sword.
|
||||
Guides.Swords.Section.1=[[DARK_AQUA]]How does Serrated Strikes work?\n[[YELLOW]]Serrated Strikes is an active ability, you can activate it by\n[[YELLOW]]right-clicking with a sword. This ability allows you to deal \n[[YELLOW]]an AoE (Area of Effect) hit. This AoE will do a bonus 25%\n[[YELLOW]]damage and will inflict a bleed effect that lasts for 5 ticks.
|
||||
Guides.Swords.Section.2=[[DARK_AQUA]]How does Counter Attack work?\n[[YELLOW]]Counter Attack is an active ability. When blocking and taking\n[[YELLOW]]hits from mobs, you will have a chance to reflect 50% of \n[[YELLOW]]the damage that was taken.
|
||||
Guides.Swords.Section.3=[[DARK_AQUA]]How does Bleed work?\n[[YELLOW]]Bleed causes enemies to take damage every two seconds. The \n[[YELLOW]]target will bleed until the effect wears off, or death, \n[[YELLOW]]whichever comes first.\n[[YELLOW]]The duration of the bleed is increased by your sword skill.
|
||||
Guides.Swords.Section.3=[[DARK_AQUA]]How does Rupture work?\n[[YELLOW]]Rupture causes enemies to take damage every two seconds. The \n[[YELLOW]]target will bleed until the effect wears off, or death, \n[[YELLOW]]whichever comes first.\n[[YELLOW]]The duration of the bleed is increased by your sword skill.
|
||||
##Taming
|
||||
Guides.Taming.Section.0=[[DARK_AQUA]]About Taming:\n[[YELLOW]]Taming will give players various combat bonuses when using\n[[YELLOW]]tamed wolves.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you need to tame wolves/ocelots or\n[[YELLOW]]get into combat with your wolves.
|
||||
Guides.Taming.Section.1=[[DARK_AQUA]]How does Call of the Wild work?\n[[YELLOW]]Call of the Wild is an active ability that will allow you to summon\n[[YELLOW]]a wolf or an ocelot by your side. You can do this by\n[[YELLOW]]left-clicking while holding bones or fish.
|
||||
|
@ -326,6 +326,17 @@ Fishing:
|
||||
Rank_7: 850
|
||||
Rank_8: 1000
|
||||
Swords:
|
||||
Rupture:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_2: 15
|
||||
Rank_3: 75
|
||||
Rank_4: 90
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_2: 150
|
||||
Rank_3: 750
|
||||
Rank_4: 900
|
||||
SerratedStrikes:
|
||||
Standard:
|
||||
Rank_1: 10
|
||||
|
@ -59,4 +59,8 @@ Sounds:
|
||||
TIRED:
|
||||
Enable: true
|
||||
Volume: 1.0
|
||||
Pitch: 1.7
|
||||
Pitch: 1.7
|
||||
BLEED:
|
||||
Enable: true
|
||||
Volume: 2.0
|
||||
Pitch: 2.0
|
Loading…
Reference in New Issue
Block a user