From 656ff2ab83be82ea91392af83ba1be3700fa744a Mon Sep 17 00:00:00 2001 From: Chris Kearney <chris@kearneymail.com> Date: Thu, 26 Nov 2015 23:59:46 -0800 Subject: [PATCH] fixing the gold bug --- .../com/comandante/creeper/ConfigureNpc.java | 2 +- .../com/comandante/creeper/Items/Loot.java | 10 +++--- .../comandante/creeper/Items/LootManager.java | 7 ++-- .../comandante/creeper/command/Command.java | 12 +++++++ .../creeper/command/LootCommand.java | 2 +- .../comandante/creeper/npc/NpcAdapter.java | 36 +++++++++---------- .../com/comandante/creeper/player/Player.java | 4 +-- .../creeper/player/PlayerMetadata.java | 2 +- .../{BlackHole.java => BlackHoleSpell.java} | 6 ++-- world/npcs/luchtigen.json | 2 +- 10 files changed, 48 insertions(+), 35 deletions(-) rename src/main/java/com/comandante/creeper/spells/{BlackHole.java => BlackHoleSpell.java} (94%) diff --git a/src/main/java/com/comandante/creeper/ConfigureNpc.java b/src/main/java/com/comandante/creeper/ConfigureNpc.java index 9e4277fe..85d1f95c 100755 --- a/src/main/java/com/comandante/creeper/ConfigureNpc.java +++ b/src/main/java/com/comandante/creeper/ConfigureNpc.java @@ -445,6 +445,6 @@ public class ConfigureNpc { SpellRegistry.addSpell(new ClumsinessSpell(gameManager)); SpellRegistry.addSpell(new RestoreSpell(gameManager)); SpellRegistry.addSpell(new AidsSpell(gameManager)); - SpellRegistry.addSpell(new BlackholeSpell(gameManager)); + SpellRegistry.addSpell(new BlackHoleSpell(gameManager)); } } diff --git a/src/main/java/com/comandante/creeper/Items/Loot.java b/src/main/java/com/comandante/creeper/Items/Loot.java index ff21ac25..c45ea8e9 100644 --- a/src/main/java/com/comandante/creeper/Items/Loot.java +++ b/src/main/java/com/comandante/creeper/Items/Loot.java @@ -6,10 +6,10 @@ import java.util.Set; public class Loot implements Serializable { private final Set<ItemType> items; - private final int lootGoldMax; - private final int lootGoldMin; + private final long lootGoldMax; + private final long lootGoldMin; - public Loot(int lootGoldMin, int lootGoldMax, Set<ItemType> items) { + public Loot(long lootGoldMin, long lootGoldMax, Set<ItemType> items) { this.items = items; this.lootGoldMax = lootGoldMax; this.lootGoldMin = lootGoldMin; @@ -19,11 +19,11 @@ public class Loot implements Serializable { return items; } - public int getLootGoldMax() { + public long getLootGoldMax() { return lootGoldMax; } - public int getLootGoldMin() { + public long getLootGoldMin() { return lootGoldMin; } } diff --git a/src/main/java/com/comandante/creeper/Items/LootManager.java b/src/main/java/com/comandante/creeper/Items/LootManager.java index cd7e2f97..88011344 100644 --- a/src/main/java/com/comandante/creeper/Items/LootManager.java +++ b/src/main/java/com/comandante/creeper/Items/LootManager.java @@ -2,6 +2,7 @@ package com.comandante.creeper.Items; import com.comandante.creeper.managers.GameManager; import com.google.common.collect.Sets; +import org.apache.commons.lang.math.JVMRandom; import java.util.Random; import java.util.Set; @@ -16,8 +17,8 @@ public class LootManager { private final Random random = new Random(); - private int randInt(int min, int max) { - return random.nextInt((max - min) + 1) + min; + private long randInt(long min, long max) { + return JVMRandom.nextLong((max - min) + 1) + min; } public boolean lootDropSuccess(double percent) { @@ -27,7 +28,7 @@ public class LootManager { return randomValue <= percent; } - public int lootGoldAmountReturn(Loot loot) { + public long lootGoldAmountReturn(Loot loot) { return randInt(loot.getLootGoldMin(), loot.getLootGoldMax()); } diff --git a/src/main/java/com/comandante/creeper/command/Command.java b/src/main/java/com/comandante/creeper/command/Command.java index 83cbc665..43a19015 100644 --- a/src/main/java/com/comandante/creeper/command/Command.java +++ b/src/main/java/com/comandante/creeper/command/Command.java @@ -163,4 +163,16 @@ public abstract class Command extends SimpleChannelUpstreamHandler { // assumes the target class has a no-args Constructor return clazz.getConstructor(GameManager.class).newInstance(gameManager); } + + public static boolean isLong(String s) { + try { + Long.parseLong(s); + } catch(NumberFormatException e) { + return false; + } catch(NullPointerException e) { + return false; + } + // only got here if we didn't return false + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/command/LootCommand.java b/src/main/java/com/comandante/creeper/command/LootCommand.java index 3b1113bf..0099f075 100644 --- a/src/main/java/com/comandante/creeper/command/LootCommand.java +++ b/src/main/java/com/comandante/creeper/command/LootCommand.java @@ -32,7 +32,7 @@ public class LootCommand extends Command { if (item.getItemTypeId() == Item.CORPSE_ID_RESERVED) { Loot loot = item.getLoot(); if (loot != null) { - int gold = lootManager.lootGoldAmountReturn(loot); + long gold = lootManager.lootGoldAmountReturn(loot); if (gold > 0) { write("You looted " + NumberFormat.getNumberInstance(Locale.US).format(gold) + Color.YELLOW + " gold" + Color.RESET + " from a " + item.getItemName() + ".\r\n"); player.incrementGold(gold); diff --git a/src/main/java/com/comandante/creeper/npc/NpcAdapter.java b/src/main/java/com/comandante/creeper/npc/NpcAdapter.java index a2727f5a..ce58b46d 100644 --- a/src/main/java/com/comandante/creeper/npc/NpcAdapter.java +++ b/src/main/java/com/comandante/creeper/npc/NpcAdapter.java @@ -108,9 +108,9 @@ public class NpcAdapter extends TypeAdapter<Npc> { jsonReader.nextName(); jsonReader.beginObject(); jsonReader.nextName(); - final int lootGoldMin = jsonReader.nextInt(); + final long lootGoldMin = jsonReader.nextLong(); jsonReader.nextName(); - final int lootGoldMax = jsonReader.nextInt(); + final long lootGoldMax = jsonReader.nextLong(); jsonReader.nextName(); jsonReader.beginArray(); Set<ItemType> items = Sets.newHashSet(); @@ -135,37 +135,37 @@ public class NpcAdapter extends TypeAdapter<Npc> { while (jsonReader.hasNext()) { String nextName = jsonReader.nextName(); if (nextName.equals("agile")) { - statsBuilder.setAgile(jsonReader.nextInt()); + statsBuilder.setAgile(jsonReader.nextLong()); } else if (nextName.equals("aim")) { - statsBuilder.setAim(jsonReader.nextInt()); + statsBuilder.setAim(jsonReader.nextLong()); } else if (nextName.equals("armorRating")) { - statsBuilder.setArmorRating(jsonReader.nextInt()); + statsBuilder.setArmorRating(jsonReader.nextLong()); } else if (nextName.equals("currentHealth")) { - statsBuilder.setCurrentHealth(jsonReader.nextInt()); + statsBuilder.setCurrentHealth(jsonReader.nextLong()); } else if (nextName.equals("currentMana")) { - statsBuilder.setCurrentMana(jsonReader.nextInt()); + statsBuilder.setCurrentMana(jsonReader.nextLong()); } else if (nextName.equals("experience")) { - statsBuilder.setExperience(jsonReader.nextInt()); + statsBuilder.setExperience(jsonReader.nextLong()); } else if (nextName.equals("maxHealth")) { - statsBuilder.setMaxHealth(jsonReader.nextInt()); + statsBuilder.setMaxHealth(jsonReader.nextLong()); } else if (nextName.equals("maxMana")) { - statsBuilder.setMaxMana(jsonReader.nextInt()); + statsBuilder.setMaxMana(jsonReader.nextLong()); } else if (nextName.equals("meleSkill")) { - statsBuilder.setMeleSkill(jsonReader.nextInt()); + statsBuilder.setMeleSkill(jsonReader.nextLong()); } else if (nextName.equals("numberOfWeaponRolls")) { - statsBuilder.setNumberOfWeaponRolls(jsonReader.nextInt()); + statsBuilder.setNumberOfWeaponRolls(jsonReader.nextLong()); } else if (nextName.equals("strength")) { - statsBuilder.setStrength(jsonReader.nextInt()); + statsBuilder.setStrength(jsonReader.nextLong()); } else if (nextName.equals("weaponRatingMax")) { - statsBuilder.setWeaponRatingMax(jsonReader.nextInt()); + statsBuilder.setWeaponRatingMax(jsonReader.nextLong()); }else if (nextName.equals("weaponRatingMin")) { - statsBuilder.setWeaponRatingMin(jsonReader.nextInt()); + statsBuilder.setWeaponRatingMin(jsonReader.nextLong()); }else if (nextName.equals("willPower")) { - statsBuilder.setWillpower(jsonReader.nextInt()); + statsBuilder.setWillpower(jsonReader.nextLong()); }else if (nextName.equals("foraging")) { - statsBuilder.setForaging(jsonReader.nextInt()); + statsBuilder.setForaging(jsonReader.nextLong()); }else if (nextName.equals("inventorySize")) { - statsBuilder.setInventorySize(jsonReader.nextInt()); + statsBuilder.setInventorySize(jsonReader.nextLong()); } } jsonReader.endObject(); diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java index d741a795..74e2c180 100755 --- a/src/main/java/com/comandante/creeper/player/Player.java +++ b/src/main/java/com/comandante/creeper/player/Player.java @@ -251,7 +251,7 @@ public class Player extends CreeperEntity { } } - public void transferGoldToBank(int amt) { + public void transferGoldToBank(long amt) { synchronized (interner.intern(playerId)) { PlayerMetadata playerMetadata = getPlayerMetadata(); playerMetadata.transferGoldToBank(amt); @@ -267,7 +267,7 @@ public class Player extends CreeperEntity { } } - public void incrementGold(int amt) { + public void incrementGold(long amt) { synchronized (interner.intern(playerId)) { PlayerMetadata playerMetadata = getPlayerMetadata(); playerMetadata.incrementGold(amt); diff --git a/src/main/java/com/comandante/creeper/player/PlayerMetadata.java b/src/main/java/com/comandante/creeper/player/PlayerMetadata.java index 38b092d1..44004e8a 100644 --- a/src/main/java/com/comandante/creeper/player/PlayerMetadata.java +++ b/src/main/java/com/comandante/creeper/player/PlayerMetadata.java @@ -169,7 +169,7 @@ public class PlayerMetadata implements Serializable { this.goldInBank = amt; } - protected void incrementGold(int amt) { + protected void incrementGold(long amt) { this.gold = gold + amt; } diff --git a/src/main/java/com/comandante/creeper/spells/BlackHole.java b/src/main/java/com/comandante/creeper/spells/BlackHoleSpell.java similarity index 94% rename from src/main/java/com/comandante/creeper/spells/BlackHole.java rename to src/main/java/com/comandante/creeper/spells/BlackHoleSpell.java index bab4595b..800eafc1 100644 --- a/src/main/java/com/comandante/creeper/spells/BlackHole.java +++ b/src/main/java/com/comandante/creeper/spells/BlackHoleSpell.java @@ -16,7 +16,7 @@ import java.util.Set; import static com.comandante.creeper.server.Color.BOLD_ON; -public class BlackholeSpell extends Spell { +public class BlackHoleSpell extends Spell { private final static String NAME = BOLD_ON + Color.BLACK + "black" + Color.RESET + " hole"; private final static String DESCRIPTION = "A black hole."; @@ -44,7 +44,7 @@ public class BlackholeSpell extends Spell { .setFrozenMovement(false) .setLifeSpanTicks(2); - public BlackholeSpell(GameManager gameManager) { + public BlackHoleSpell(GameManager gameManager) { super(gameManager, validTriggers, manaCost, attackStats, attackMessages, DESCRIPTION, NAME, Sets.newHashSet(holeEffect.createEffect()), isAreaSpell, null, coolDownTicks); } @@ -52,7 +52,7 @@ public class BlackholeSpell extends Spell { public void attackSpell(Set<String> npcIds, Player player) { Stats playerStats = player.getPlayerStatsWithEquipmentAndLevel(); long willpower = playerStats.getWillpower(); - long i = 66666666666 + (willpower * 3); + long i = 66666666666L + (willpower * 3); this.setEffects(Sets.newHashSet(holeEffect.setApplyStatsOnTick(new StatsBuilder().setCurrentHealth(-i).createStats()).createEffect())); super.attackSpell(npcIds, player); } diff --git a/world/npcs/luchtigen.json b/world/npcs/luchtigen.json index 37bb48af..f5c41326 100644 --- a/world/npcs/luchtigen.json +++ b/world/npcs/luchtigen.json @@ -32,7 +32,7 @@ "maxPerRoom": 1, "spawnIntervalTicks": 600, "maxInstances": 3 - }, + } }, "validTriggers": [ "luchtigen", -- GitLab