diff --git a/src/main/java/com/comandante/creeper/CreeperUtils.java b/src/main/java/com/comandante/creeper/CreeperUtils.java index a839e591f86f99d162a1909f0fc9e326750372cc..536fdfd287312fb7bdf7726c44c89e05e5b95e64 100644 --- a/src/main/java/com/comandante/creeper/CreeperUtils.java +++ b/src/main/java/com/comandante/creeper/CreeperUtils.java @@ -3,12 +3,14 @@ package com.comandante.creeper; import com.google.common.collect.Lists; import java.util.List; +import java.util.Random; import java.util.stream.Collectors; public class CreeperUtils { public static String asciiColorPattern = "\u001B\\[[;\\d]*m"; + private static Random random = new Random(); /* Prints things "next" to each other, like this: -+=[ fibs ]=+- | -+=[ fibs ]=+- @@ -132,4 +134,8 @@ Bag 25 (+15) | Bag 25 (+15) } return str.substring(0, len); } + + public static int randInt(int min, int max) { + return random.nextInt((max - min) + 1) + min; + } } diff --git a/src/main/java/com/comandante/creeper/command/CastCommand.java b/src/main/java/com/comandante/creeper/command/CastCommand.java index ae7e281d4090f26e90bf111002dc3edb6841456a..43ac86f463bc34e023756501913d921486371ae7 100644 --- a/src/main/java/com/comandante/creeper/command/CastCommand.java +++ b/src/main/java/com/comandante/creeper/command/CastCommand.java @@ -5,8 +5,10 @@ import com.comandante.creeper.managers.GameManager; import com.comandante.creeper.npc.Npc; import com.comandante.creeper.player.CoolDownType; import com.comandante.creeper.player.Player; +import com.comandante.creeper.spells.ExecuteSpellRunnable; import com.comandante.creeper.spells.Spell; import com.comandante.creeper.spells.SpellTriggerRegistry; +import com.comandante.creeper.spells.Spells; import com.google.common.base.Joiner; import com.google.common.collect.Sets; import org.jboss.netty.channel.ChannelHandlerContext; @@ -14,6 +16,7 @@ import org.jboss.netty.channel.MessageEvent; import java.util.Arrays; import java.util.List; +import java.util.Optional; public class CastCommand extends Command { @@ -41,42 +44,37 @@ public class CastCommand extends Command { return; } String desiredSpellName = originalMessageParts.get(1); - Spell spell = SpellTriggerRegistry.getSpell(desiredSpellName); - if (spell == null || !player.doesHaveSpellLearned(spell.getSpellName())) { + Optional<ExecuteSpellRunnable> spellRunnable = gameManager.getSpells().getSpellRunnable(desiredSpellName); + if (!spellRunnable.isPresent() || !player.doesHaveSpellLearned(spellRunnable.get().getName())) { write("No spell found with the name: " + desiredSpellName + "\r\n"); return; } - if (player.isActiveSpellCoolDown(spell.getSpellName())) { + if (player.isActiveSpellCoolDown(spellRunnable.get().getName())) { write("That spell is still in cooldown.\r\n"); write(gameManager.renderCoolDownString(player.getCoolDowns())); return; } if (originalMessageParts.size() == 2) { - if (spell.isAreaSpell()) { - spell.attackSpell(currentRoom.getNpcIds(), player); - return; - } else { - write("Spell is not an area of attack. Need to specify a target.\r\n"); - return; - } + gameManager.getSpells().executeSpell(player, Optional.empty(), Optional.empty(), spellRunnable.get()); + return; } originalMessageParts.remove(0); originalMessageParts.remove(0); String target = Joiner.on(" ").join(originalMessageParts); if (player.getPlayerName().equals(target)) { - spell.attackSpell(this.player, this.player); + gameManager.getSpells().executeSpell(player, Optional.empty(), Optional.ofNullable(player), spellRunnable.get()); return; } for (Player destinationPlayer : roomManager.getPresentPlayers(currentRoom)) { if (destinationPlayer.getPlayerName().equalsIgnoreCase(target)) { - spell.attackSpell(destinationPlayer, this.player); + gameManager.getSpells().executeSpell(player, Optional.empty(), Optional.of(destinationPlayer), spellRunnable.get()); return; } } for (String npcId : currentRoom.getNpcIds()) { Npc npcEntity = entityManager.getNpcEntity(npcId); if (npcEntity.getValidTriggers().contains(target)) { - spell.attackSpell(Sets.newHashSet(npcId), player); + gameManager.getSpells().executeSpell(player, Optional.of(npcEntity), Optional.empty(), spellRunnable.get()); return; } } diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java index 13e1e41a6d4a2baf158392d8a9b0d02c809f9260..4dafb97e2c2abe850b4898b759c5a4e39532a457 100644 --- a/src/main/java/com/comandante/creeper/managers/GameManager.java +++ b/src/main/java/com/comandante/creeper/managers/GameManager.java @@ -21,6 +21,7 @@ import com.comandante.creeper.server.MultiLineInputManager; import com.comandante.creeper.spawner.NpcSpawner; import com.comandante.creeper.spells.Effect; import com.comandante.creeper.spells.EffectsManager; +import com.comandante.creeper.spells.Spells; import com.comandante.creeper.stat.Stats; import com.comandante.creeper.stat.StatsBuilder; import com.comandante.creeper.world.*; @@ -68,6 +69,7 @@ public class GameManager { private final TimeTracker timeTracker; private final ItemUseHandler itemUseHandler; private final NpcMover npcMover; + private final Spells spells; private final SingleThreadedCreeperEventProcessor eventProcessor = new SingleThreadedCreeperEventProcessor(new ArrayBlockingQueue<>(100000)); public GameManager(CreeperConfiguration creeperConfiguration, RoomManager roomManager, PlayerManager playerManager, EntityManager entityManager, MapsManager mapsManager, ChannelCommunicationUtils channelUtils) { @@ -94,9 +96,14 @@ public class GameManager { this.entityManager.addEntity(itemDecayManager); this.itemUseHandler = new ItemUseHandler(this); this.npcMover = new NpcMover(this); + this.spells = new Spells(this); this.eventProcessor.startAsync(); } + public Spells getSpells() { + return spells; + } + public NpcMover getNpcMover() { return npcMover; } @@ -460,6 +467,13 @@ public class GameManager { sb.append("(").append(Color.GREEN).append("+").append(getFormattedNumber(diff.getStrength())).append(Color.RESET).append(")"); t.addCell(sb.toString()); + sb = new StringBuilder(); + t.addCell("Intelligence"); + t.addCell(getFormattedNumber(stats.getIntelligence())); + if (diff.getStrength() > 0) + sb.append("(").append(Color.GREEN).append("+").append(getFormattedNumber(diff.getIntelligence())).append(Color.RESET).append(")"); + t.addCell(sb.toString()); + sb = new StringBuilder(); t.addCell("Willpower"); t.addCell(getFormattedNumber(stats.getWillpower())); diff --git a/src/main/java/com/comandante/creeper/player/BasicPlayerLevelStatsModifier.java b/src/main/java/com/comandante/creeper/player/BasicPlayerLevelStatsModifier.java index bd62876923a7155295f50eadf884d68f3a6c5298..b84ef6b2fd3b493636384501230bff8965c75eb6 100644 --- a/src/main/java/com/comandante/creeper/player/BasicPlayerLevelStatsModifier.java +++ b/src/main/java/com/comandante/creeper/player/BasicPlayerLevelStatsModifier.java @@ -17,6 +17,7 @@ public class BasicPlayerLevelStatsModifier implements StatsModifier { private static double MELE_CONSTANT_MODIFIER = 1.01; private static double WILLPOWER_CONSTANT_MODIFIER = 1.01; + private static double INTELLIGENCE_CONSTANT_MODIFIER = 1.01; private static double AGILE_CONSTANT_MODIFIER = 1.01; private static double AIM_CONSTANT_MODIFIER = 1.01; private static double HEALTH_CONSTANT_MODIFIER = 4; @@ -34,6 +35,11 @@ public class BasicPlayerLevelStatsModifier implements StatsModifier { return (long) Math.floor(v) + baseStat; } + public static long getIntelligenceForLevel(long baseStat, long level) { + double v = (level) * sqrt(pow(level, INTELLIGENCE_CONSTANT_MODIFIER)); + return (long) Math.floor(v) + baseStat; + } + public static long getAgileForLevel(long baseStat, long level) { double v = (level) * sqrt(pow(level, AGILE_CONSTANT_MODIFIER)); return (long) Math.floor(v) + baseStat; @@ -75,12 +81,14 @@ public class BasicPlayerLevelStatsModifier implements StatsModifier { long newMaxMana = getManaForLevel(baseStats.getMaxMana(), level); long newAimRating = getAimForLevel(baseStats.getAim(), level); long newWillpowerRating = getWillpowerForLevel(baseStats.getWillpower(), level); + long newIntelligenceRating = getIntelligenceForLevel(baseStats.getIntelligence(), level); long newAgileRating = getAgileForLevel(baseStats.getAgile(), level); long newMeleRating = getMeleForLevel(baseStats.getMeleSkill(), level); StatsBuilder statsBuilder = new StatsBuilder(baseStats); statsBuilder.setMaxHealth(newMaxHealth); statsBuilder.setArmorRating(newArmorRating); statsBuilder.setStrength(newStrengthRating); + statsBuilder.setIntelligence(newIntelligenceRating); statsBuilder.setMaxMana(newMaxMana); statsBuilder.setAim(newAimRating); statsBuilder.setWillpower(newWillpowerRating); diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java index 5c6e600be411b383154d25ddb919113b684a321d..a45eb9310e3dcab7d773a6e4bf477bbac4ea3e6a 100644 --- a/src/main/java/com/comandante/creeper/player/Player.java +++ b/src/main/java/com/comandante/creeper/player/Player.java @@ -216,6 +216,15 @@ public class Player extends CreeperEntity { } } + public void writeMessage(String msg) { + gameManager.getChannelUtils().write(getPlayerId(), msg); + } + + public long getAvailableMana(){ + return getPlayerStatsWithEquipmentAndLevel().getCurrentMana(); + } + + private void addHealth(long addAmt, PlayerMetadata playerMetadata) { long currentHealth = playerMetadata.getStats().getCurrentHealth(); Stats statsModifier = getPlayerStatsWithEquipmentAndLevel(); @@ -268,6 +277,10 @@ public class Player extends CreeperEntity { } } + public long getLevel() { + return Levels.getLevel(getPlayerMetadata().getStats().getExperience()); + } + private PlayerMetadata getPlayerMetadata() { return gameManager.getPlayerManager().getPlayerMetadata(playerId); } diff --git a/src/main/java/com/comandante/creeper/player/PlayerStats.java b/src/main/java/com/comandante/creeper/player/PlayerStats.java index 7f2ea2fe9d6a07c324fb32509075dda7b5bae7c5..aa284f6afa9fe69ebe36b1f4f640feecff7d9f50 100644 --- a/src/main/java/com/comandante/creeper/player/PlayerStats.java +++ b/src/main/java/com/comandante/creeper/player/PlayerStats.java @@ -7,6 +7,7 @@ public class PlayerStats { public final static StatsBuilder DEFAULT_PLAYER = new StatsBuilder() .setStrength(10) + .setIntelligence(5) .setWillpower(1) .setAim(1) .setAgile(1) diff --git a/src/main/java/com/comandante/creeper/spells/ExecuteSpellRunnable.java b/src/main/java/com/comandante/creeper/spells/ExecuteSpellRunnable.java new file mode 100644 index 0000000000000000000000000000000000000000..7b67fb3e15705d454f0e97f024916522ca391609 --- /dev/null +++ b/src/main/java/com/comandante/creeper/spells/ExecuteSpellRunnable.java @@ -0,0 +1,13 @@ +package com.comandante.creeper.spells; + + +import com.comandante.creeper.managers.GameManager; +import com.comandante.creeper.npc.Npc; +import com.comandante.creeper.player.Player; + +import java.util.Optional; + +public interface ExecuteSpellRunnable { + void run(Player sourcePlayer, Optional<Npc> destinationNpc, Optional<Player> destinationPlayer, GameManager gameManager); + String getName(); +} diff --git a/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java b/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java new file mode 100644 index 0000000000000000000000000000000000000000..566e1252e83f59319b104f286042626f91a695da --- /dev/null +++ b/src/main/java/com/comandante/creeper/spells/LightningSpellRunnable.java @@ -0,0 +1,61 @@ +package com.comandante.creeper.spells; + +import com.comandante.creeper.CreeperUtils; +import com.comandante.creeper.managers.GameManager; +import com.comandante.creeper.npc.Npc; +import com.comandante.creeper.player.CoolDown; +import com.comandante.creeper.player.CoolDownType; +import com.comandante.creeper.player.Player; +import com.comandante.creeper.server.Color; +import com.comandante.creeper.stat.Stats; +import com.comandante.creeper.stat.StatsBuilder; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; + +import static com.comandante.creeper.server.Color.BOLD_ON; +import static com.comandante.creeper.spells.Spells.getSpellAttack; + +public class LightningSpellRunnable implements ExecuteSpellRunnable { + + private final GameManager gameManager; + private final int manaCost = 60; + public final static String name = BOLD_ON + Color.YELLOW + "lightning" + Color.RESET + " bolt"; + private final static String description = "A powerful bolt of lightning."; + + public LightningSpellRunnable(GameManager gameManager) { + this.gameManager = gameManager; + } + + @Override + public void run(Player sourcePlayer, Optional<Npc> destinationNpc, Optional<Player> destinationPlayer, GameManager gameManager) { + long availableMana = sourcePlayer.getPlayerStatsWithEquipmentAndLevel().getCurrentMana(); + if (availableMana < manaCost) { + sourcePlayer.writeMessage("Not enough mana!" + "\r\n"); + return; + } + if (destinationNpc.isPresent()) { + executeSpellAgainstNpc(sourcePlayer, destinationNpc.get()); + } + } + + @Override + public String getName() { + return name; + } + + private void executeSpellAgainstNpc(Player player, Npc npc) { + long intelligence = player.getPlayerStatsWithEquipmentAndLevel().getIntelligence(); + long power = (player.getLevel() * 1) + (3 * intelligence); + player.addActiveFight(npc); + npc.doHealthDamage(player, Arrays.asList("LightingBoltAttack!! damage amount: " + power), -power); + } + + private void executeSpellAgainstPlayer(Player player, Player destinationPlayer) { + + } +} diff --git a/src/main/java/com/comandante/creeper/spells/Spell.java b/src/main/java/com/comandante/creeper/spells/Spell.java index f702e299525961f3dacdadf8a4a2247c8eeddd60..e6b3636ed374f778d56ef9a75b04b661864f9f4d 100644 --- a/src/main/java/com/comandante/creeper/spells/Spell.java +++ b/src/main/java/com/comandante/creeper/spells/Spell.java @@ -13,10 +13,7 @@ import com.google.common.collect.Interner; import com.google.common.collect.Interners; import org.apache.log4j.Logger; -import java.util.Arrays; -import java.util.List; -import java.util.Random; -import java.util.Set; +import java.util.*; public abstract class Spell { diff --git a/src/main/java/com/comandante/creeper/spells/Spells.java b/src/main/java/com/comandante/creeper/spells/Spells.java new file mode 100644 index 0000000000000000000000000000000000000000..5874a7d66894d2f4af2b1d0e8f679c7703372388 --- /dev/null +++ b/src/main/java/com/comandante/creeper/spells/Spells.java @@ -0,0 +1,93 @@ +package com.comandante.creeper.spells; + +import com.comandante.creeper.CreeperUtils; +import com.comandante.creeper.managers.GameManager; +import com.comandante.creeper.npc.Npc; +import com.comandante.creeper.player.Player; +import com.comandante.creeper.server.Color; +import com.comandante.creeper.stat.Stats; +import com.comandante.creeper.stat.StatsHelper; +import com.google.common.collect.Interner; +import com.google.common.collect.Interners; +import com.google.common.collect.Sets; +import org.apache.log4j.Logger; + +import java.util.Optional; +import java.util.Set; + +public class Spells { + + private GameManager gameManager; + + private static final Logger log = Logger.getLogger(Spell.class); + + public Spells(GameManager gameManager) { + this.gameManager = gameManager; + } + + public void executeSpell(Player sourcePlayer, Optional<Npc> destinationNpc, Optional<Player> destinationPlayer, ExecuteSpellRunnable executeSpellRunnable) { + try { + executeSpellRunnable.run(sourcePlayer, destinationNpc, destinationPlayer, gameManager); + } catch (Exception e) { + log.error("Problem executing spell.", e); + } + } + + public Optional<ExecuteSpellRunnable> getSpellRunnable(String triggerName) { + if (Sets.newHashSet("lightning", "l").contains(triggerName)) { + return Optional.of(new LightningSpellRunnable(gameManager)); + } + return Optional.empty(); + } + + public void applyEffectsToNpcs(Player player, Set<Npc> npcs, Set<Effect> effects) { + effects.forEach(effect -> + npcs.forEach(npc -> { + Effect nEffect = new Effect(effect); + nEffect.setPlayerId(player.getPlayerId()); + if (effect.getDurationStats().getCurrentHealth() < 0) { + log.error("ERROR! Someone added an effect with a health modifier which won't work for various reasons."); + return; + } + StatsHelper.combineStats(npc.getStats(), effect.getDurationStats()); + npc.addEffect(nEffect); + })); + } + + public void applyEffectsToPlayer(Player destinationPlayer, Player player, Set<Effect> effects) { + for (Effect effect : effects) { + Effect nEffect = new Effect(effect); + nEffect.setPlayerId(player.getPlayerId()); + gameManager.getEntityManager().saveEffect(nEffect); + if (effect.getDurationStats().getCurrentHealth() < 0) { + log.error("ERROR! Someone added an effect with a health modifier which won't work for various reasons."); + continue; + } + String effectApplyMessage; + if (destinationPlayer.addEffect(effect.getEntityId())) { + effectApplyMessage = Color.BOLD_ON + Color.GREEN + "[effect] " + Color.RESET + nEffect.getEffectName() + " applied!" + "\r\n"; + gameManager.getChannelUtils().write(destinationPlayer.getPlayerId(), effectApplyMessage); + } else { + effectApplyMessage = Color.BOLD_ON + Color.GREEN + "[effect] " + Color.RESET + Color.RED + "Unable to apply " + nEffect.getEffectName() + "!" + "\r\n"; + gameManager.getChannelUtils().write(player.getPlayerId(), effectApplyMessage); + } + } + } + + public static long getSpellAttack(Stats player, Stats victim) { + int rolls = 0; + int totDamage = 0; + while (rolls <= player.getNumberOfWeaponRolls()) { + rolls++; + totDamage = totDamage + CreeperUtils.randInt((int) player.getWeaponRatingMin(), (int) player.getWeaponRatingMax()); + } + long i = player.getStrength() + totDamage - victim.getArmorRating(); + if (i < 0) { + return 0; + } else { + return i; + } + } +} + + diff --git a/src/main/java/com/comandante/creeper/stat/Stats.java b/src/main/java/com/comandante/creeper/stat/Stats.java index 504b92abdd59b0b7d2bbb2394f3b11e661d919eb..07f3b2371cb3e61b0657a7d63bbf500634591b1a 100644 --- a/src/main/java/com/comandante/creeper/stat/Stats.java +++ b/src/main/java/com/comandante/creeper/stat/Stats.java @@ -4,6 +4,7 @@ import java.io.Serializable; public class Stats implements Serializable { private long strength; + private long intelligence; private long willpower; private long aim; private long agile; @@ -23,6 +24,7 @@ public class Stats implements Serializable { public Stats(Stats stats) { this.strength = stats.strength; + this.intelligence = stats.intelligence; this.willpower = stats.willpower; this.aim = stats.aim; this.agile = stats.agile; @@ -44,6 +46,7 @@ public class Stats implements Serializable { } public Stats(long strength, + long intelligence, long willpower, long aim, long agile, @@ -61,6 +64,7 @@ public class Stats implements Serializable { long inventorySize, long maxEffects) { this.strength = strength; + this.intelligence = intelligence; this.willpower = willpower; this.aim = aim; this.agile = agile; @@ -80,6 +84,14 @@ public class Stats implements Serializable { } + public long getIntelligence() { + return intelligence; + } + + public void setIntelligence(long intelligence) { + this.intelligence = intelligence; + } + public long getMaxEffects() { return maxEffects; } diff --git a/src/main/java/com/comandante/creeper/stat/StatsBuilder.java b/src/main/java/com/comandante/creeper/stat/StatsBuilder.java index d2532fd47035bb61c213b6722e8229b3b3ad6d49..b8ab39495ec4660e69d5293666ba48f7c7782bbe 100644 --- a/src/main/java/com/comandante/creeper/stat/StatsBuilder.java +++ b/src/main/java/com/comandante/creeper/stat/StatsBuilder.java @@ -2,6 +2,7 @@ package com.comandante.creeper.stat; public class StatsBuilder { private long strength; + private long intelligence; private long willpower; private long aim; private long agile; @@ -24,6 +25,7 @@ public class StatsBuilder { public StatsBuilder(Stats stats) { this.strength = stats.getStrength(); + this.intelligence = stats.getIntelligence(); this.willpower = stats.getWillpower(); this.aim = stats.getAim(); this.agile = stats.getAgile(); @@ -43,6 +45,11 @@ public class StatsBuilder { this.maxEffects = stats.getMaxEffects(); } + public StatsBuilder setIntelligence(long intelligence) { + this.intelligence = intelligence; + return this; + } + public StatsBuilder setStrength(long strength) { this.strength = strength; return this; @@ -129,6 +136,6 @@ public class StatsBuilder { } public Stats createStats() { - return new Stats(strength, willpower, aim, agile, armorRating, meleSkill, currentHealth, maxHealth, weaponRatingMax, weaponRatingMin, numberOfWeaponRolls, experience, currentMana, maxMana, foraging, inventorySize, maxEffects); + return new Stats(strength, intelligence, willpower, aim, agile, armorRating, meleSkill, currentHealth, maxHealth, weaponRatingMax, weaponRatingMin, numberOfWeaponRolls, experience, currentMana, maxMana, foraging, inventorySize, maxEffects); } } \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/stat/StatsHelper.java b/src/main/java/com/comandante/creeper/stat/StatsHelper.java index cb73df3276081f1c0527e762a2adf7cac756d8a1..512a33149ec5833465bef64b865ee08053732661 100644 --- a/src/main/java/com/comandante/creeper/stat/StatsHelper.java +++ b/src/main/java/com/comandante/creeper/stat/StatsHelper.java @@ -5,6 +5,7 @@ public class StatsHelper { public static Stats getDifference(Stats modifiedStats, Stats origStats) { StatsBuilder statsBuilder = new StatsBuilder(); statsBuilder.setAgile(modifiedStats.getAgile() - origStats.getAgile()); + statsBuilder.setIntelligence(modifiedStats.getIntelligence() - origStats.getIntelligence()); statsBuilder.setAim(modifiedStats.getAim() - origStats.getAim()); statsBuilder.setArmorRating(modifiedStats.getArmorRating() - origStats.getArmorRating()); statsBuilder.setCurrentHealth(modifiedStats.getCurrentHealth() - origStats.getCurrentHealth()); @@ -26,6 +27,7 @@ public class StatsHelper { public static void combineStats(Stats orig, Stats combine) { orig.setAgile(orig.getAgile() + combine.getAgile()); + orig.setIntelligence(orig.getIntelligence() + combine.getIntelligence()); orig.setAim(orig.getAim() + combine.getAim()); orig.setArmorRating(orig.getArmorRating() + combine.getArmorRating()); orig.setCurrentHealth(orig.getCurrentHealth() + combine.getCurrentHealth()); @@ -47,6 +49,7 @@ public class StatsHelper { public static void inverseStats(Stats stats) { stats.setAgile(-stats.getAgile()); stats.setAim(-stats.getAim()); + stats.setIntelligence(-stats.getIntelligence()); stats.setArmorRating(-stats.getArmorRating()); stats.setCurrentHealth(-stats.getCurrentHealth()); stats.setMaxHealth(-stats.getMaxHealth()); diff --git a/src/test/com/comandante/creeper/player/NpcTestHarness.java b/src/test/com/comandante/creeper/player/NpcTestHarness.java index 2f4c0401961be8eda30939df81219aa9d5ad1c6b..1a4adc0da7804f91a233c4119ff62880feb17630 100644 --- a/src/test/com/comandante/creeper/player/NpcTestHarness.java +++ b/src/test/com/comandante/creeper/player/NpcTestHarness.java @@ -227,4 +227,26 @@ public class NpcTestHarness { PlayerMetadata playerMetadata = new PlayerMetadata(username, password, Main.createPlayerId(username), PlayerStats.DEFAULT_PLAYER.createStats(), 0, Sets.newHashSet(PlayerRole.MORTAL), new String[0], 0, new String[0], Maps.newHashMap()); gameManager.getPlayerManager().savePlayerMetadata(playerMetadata); } + + private int getLightningSpellDamage(int level, int intelligence, int npcIntelligence) { + return (level * 1) + (3 * intelligence); + + } + + @Test + public void screwingAround() throws Exception { + + int lightningSpellDamage = getLightningSpellDamage(4, 7, 4); + System.out.println("Level 1 player with 7 intelligence vs 4 intelligence npc: " + lightningSpellDamage); + + lightningSpellDamage = getLightningSpellDamage(5, 11, 6); + System.out.println("Level 5 player with 11 intelligence vs 6 intelligence npc: " + lightningSpellDamage); + lightningSpellDamage = getLightningSpellDamage(7, 14, 8); + System.out.println("Level 7 player with 14 intelligence vs 8 intelligence npc: " + lightningSpellDamage); + lightningSpellDamage = getLightningSpellDamage(9,16, 10); + System.out.println("Level 9 player with 16 intelligence vs 10 intelligence npc: " + lightningSpellDamage); + lightningSpellDamage = getLightningSpellDamage(12, 21, 13); + System.out.println("Level 12 player with 21 intelligence vs 13 intelligence npc: " + lightningSpellDamage); + + } }