diff --git a/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java b/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java index 048b2bed3cb9e7540019de5b1d80eaf09665017a..6b1df152c4575d4db0b2f1abd57cd1c95ad255e9 100644 --- a/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java +++ b/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java @@ -50,14 +50,23 @@ public class LightningSpellRunnable implements SpellRunnable { private void executeSpellAgainstNpc(Player player, Npc npc) { announceSpellCastToCurrentRoom(player, npc.getColorName()); - long intelligence = player.getPlayerStatsWithEquipmentAndLevel().getIntelligence(); - long power = (player.getLevel() * 1) + (3 * intelligence); + Stats stats = player.getPlayerStatsWithEquipmentAndLevel(); + long power = (player.getLevel() * 1) + (3 * stats.getIntelligence()); player.addActiveFight(npc); - long burnEffectPower = (long) ((player.getLevel() * .05) + (1 * intelligence)); - gameManager.getEffectsManager().applyEffectsToNpcs(player, Sets.newHashSet(npc), Sets.newHashSet(getBurnEffect(burnEffectPower, 2).createEffect())); + gameManager.getEffectsManager().applyEffectsToNpcs(player, Sets.newHashSet(npc), Sets.newHashSet(selectEffect(stats).createEffect())); npc.doHealthDamage(player, Arrays.asList(getDamageMessage(power, npc.getColorName())), -power); } + private EffectBuilder selectEffect(Stats stats) { + if (Math.random() < 0.1) { + long electrofiedPower = (long) ((stats.getLevel() * .3) + (5 * stats.getIntelligence())); + return getElectrofried(electrofiedPower, 4); + } + long burnEffectPower = (long) ((stats.getLevel() * .05) + (1 * stats.getIntelligence())); + return getBurnEffect(burnEffectPower, 2); + + } + private void executeSpellAgainstPlayer(Player player, Player destinationPlayer) { } @@ -84,4 +93,15 @@ public class LightningSpellRunnable implements SpellRunnable { .setFrozenMovement(false) .setLifeSpanTicks(ticksDuration); } + + private EffectBuilder getElectrofried(long amt, int ticksDuration) { + return new EffectBuilder() + .setEffectApplyMessages(Lists.newArrayList("You are " + Color.BOLD_ON + Color.YELLOW + "ELECTROFIED" + Color.RESET + " from the lightning strike!")) + .setEffectDescription(Color.BOLD_ON + Color.YELLOW + "lightning" + Color.RESET + Color.BOLD_ON + Color.YELLOW + " ELECTROFIED" + Color.RESET) + .setEffectName(Color.BOLD_ON + Color.YELLOW + "lightning" + Color.RESET + Color.BOLD_ON + Color.YELLOW + " ELECTROFIED" + Color.RESET) + .setDurationStats(new StatsBuilder().createStats()) + .setApplyStatsOnTick(new StatsBuilder().setCurrentHealth(-amt).createStats()) + .setFrozenMovement(false) + .setLifeSpanTicks(ticksDuration); + } } diff --git a/src/main/java/com/comandante/creeper/stat/Stats.java b/src/main/java/com/comandante/creeper/stat/Stats.java index 07f3b2371cb3e61b0657a7d63bbf500634591b1a..123a47bf4354473aeab3f832b6c362aa898532c1 100644 --- a/src/main/java/com/comandante/creeper/stat/Stats.java +++ b/src/main/java/com/comandante/creeper/stat/Stats.java @@ -2,6 +2,8 @@ package com.comandante.creeper.stat; import java.io.Serializable; +import static java.lang.StrictMath.sqrt; + public class Stats implements Serializable { private long strength; private long intelligence; @@ -227,4 +229,12 @@ public class Stats implements Serializable { public void setInventorySize(long inventorySize) { this.inventorySize = inventorySize; } + + private static double CONSTANT_MODIFIER = 0.02; + + public long getLevel() { + double v = CONSTANT_MODIFIER * sqrt(getExperience()); + return (long) Math.floor(v); + } + }