From f3f2cff842db92957e92213b3badb2ae2d094a0d Mon Sep 17 00:00:00 2001 From: Chris Kearney <chris@kearneymail.com> Date: Wed, 17 Aug 2016 20:57:23 -0700 Subject: [PATCH] random 10% chance of triggering ELECTROFIED rather than BURN --- .../spells/LightningSpellRunnable.java | 28 ++++++++++++++++--- .../com/comandante/creeper/stat/Stats.java | 10 +++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java b/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java index 048b2bed..6b1df152 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 07f3b237..123a47bf 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); + } + } -- GitLab