From 04194e7035aa12885d00114c8451703c5c177225 Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris.kearney@urbanairship.com>
Date: Sun, 31 Aug 2014 23:48:23 -0700
Subject: [PATCH] progress on npc interaction

---
 .../java/com/comandante/creeper/Main.java     |  4 +-
 .../com/comandante/creeper/npc/Derper.java    | 60 -------------------
 .../comandante/creeper/npc/DruggedPimp.java   | 31 ----------
 .../java/com/comandante/creeper/npc/Npc.java  | 10 +++-
 .../comandante/creeper/npc/StreetHustler.java | 35 +++++++++++
 .../creeper/server/command/KillCommand.java   |  2 +-
 6 files changed, 47 insertions(+), 95 deletions(-)
 delete mode 100644 src/main/java/com/comandante/creeper/npc/Derper.java
 delete mode 100644 src/main/java/com/comandante/creeper/npc/DruggedPimp.java
 create mode 100644 src/main/java/com/comandante/creeper/npc/StreetHustler.java

diff --git a/src/main/java/com/comandante/creeper/Main.java b/src/main/java/com/comandante/creeper/Main.java
index 2f31f100..962b6358 100644
--- a/src/main/java/com/comandante/creeper/Main.java
+++ b/src/main/java/com/comandante/creeper/Main.java
@@ -3,7 +3,7 @@ package com.comandante.creeper;
 import com.comandante.creeper.entity.EntityManager;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.managers.SessionManager;
-import com.comandante.creeper.npc.DruggedPimp;
+import com.comandante.creeper.npc.StreetHustler;
 import com.comandante.creeper.player.PlayerManager;
 import com.comandante.creeper.player.PlayerMetadata;
 import com.comandante.creeper.room.Area;
@@ -79,7 +79,7 @@ public class Main {
 
         // zones end
 
-        entityManager.addEntity(new NpcSpawner(new DruggedPimp(gameManager), Area.NEWBIE_ZONE, gameManager, new SpawnRule(10, 30, 4, 100)));
+        entityManager.addEntity(new NpcSpawner(new StreetHustler(gameManager), Area.NEWBIE_ZONE, gameManager, new SpawnRule(10, 30, 4, 100)));
         Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms();
         while (rooms.hasNext()) {
             Map.Entry<Integer, Room> next = rooms.next();
diff --git a/src/main/java/com/comandante/creeper/npc/Derper.java b/src/main/java/com/comandante/creeper/npc/Derper.java
deleted file mode 100644
index 43f67a93..00000000
--- a/src/main/java/com/comandante/creeper/npc/Derper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.comandante.creeper.npc;
-
-
-import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.room.Area;
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Random;
-
-import static com.comandante.creeper.server.Color.GREEN;
-import static com.comandante.creeper.server.Color.RESET;
-
-public class Derper extends Npc {
-
-    private final static long phraseIntervalMs = 300000;
-    private final static String NAME = "derper";
-    private final Random random;
-    private final static String colorName = new StringBuilder()
-            .append(GREEN)
-            .append("derper")
-            .append(RESET).toString();
-
-
-    public Derper(GameManager gameManager) {
-        super(gameManager, NAME, colorName, 0, NpcStats.DERPER.createStats(), "derper's face is melted", Optional.of(Sets.newHashSet(Area.NEWBIE_ZONE)));
-        this.random = new Random();
-    }
-
-
-    @Override
-    public Derper create(GameManager gameManager) {
-        return new Derper(gameManager);
-    }
-
-    @Override
-    public void run() {
-        super.run();
-        if (System.currentTimeMillis() - getLastPhraseTimestamp() > phraseIntervalMs) {
-            int size = PHRASES.size();
-            //npcSay(getRoomId(), PHRASES.get(random.nextInt(size)));
-            setLastPhraseTimestamp(System.currentTimeMillis());
-        }
-    }
-
-    public static List<String> PHRASES = Arrays.asList(
-            "Zug, zug.",
-            "Don't provoke me.",
-            "Tough guy, eh?",
-            "I will end you.",
-            "This is not a drill, I will eliminate your existence.",
-            "This is smash talk, I will derp you.",
-            "Have ever been derped by a derper? I will hurt you.",
-            "I was taught to provoke.",
-            "Oh hey I will fight you.",
-            "WORDS OF THREATENING NATURE!"
-    );
-}
diff --git a/src/main/java/com/comandante/creeper/npc/DruggedPimp.java b/src/main/java/com/comandante/creeper/npc/DruggedPimp.java
deleted file mode 100644
index 6d1c5d58..00000000
--- a/src/main/java/com/comandante/creeper/npc/DruggedPimp.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.comandante.creeper.npc;
-
-import com.comandante.creeper.managers.GameManager;
-import com.comandante.creeper.room.Area;
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-
-import java.util.Random;
-
-import static com.comandante.creeper.server.Color.GREEN;
-import static com.comandante.creeper.server.Color.RESET;
-
-public class DruggedPimp extends Npc {
-    private final static long phraseIntervalMs = 300000;
-    private final static String NAME = "drugged pimp";
-    private final Random random;
-    private final static String colorName = new StringBuilder()
-            .append(GREEN)
-            .append("drugged pimp")
-            .append(RESET).toString();
-
-    public DruggedPimp(GameManager gameManager) {
-        super(gameManager, NAME, colorName, 0, NpcStats.DRUGGED_PIMP.createStats(), "a drugged pimp is dead and broke", Optional.of(Sets.newHashSet(Area.NEWBIE_ZONE)));
-        this.random = new Random();
-    }
-
-    @Override
-    public DruggedPimp create(GameManager gameManager) {
-        return new DruggedPimp(gameManager);
-    }
-}
diff --git a/src/main/java/com/comandante/creeper/npc/Npc.java b/src/main/java/com/comandante/creeper/npc/Npc.java
index e84d674e..5d0feb22 100644
--- a/src/main/java/com/comandante/creeper/npc/Npc.java
+++ b/src/main/java/com/comandante/creeper/npc/Npc.java
@@ -9,6 +9,7 @@ import com.google.common.base.Optional;
 
 import java.util.HashSet;
 import java.util.Random;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static com.comandante.creeper.server.Color.RED;
@@ -28,6 +29,8 @@ public abstract class Npc extends CreeperEntity {
     private final Stats stats;
     private final String dieMessage;
     private final Optional<HashSet<Area>> roamAreas;
+    private final Set<String> validTriggers;
+
     private AtomicBoolean isInFight = new AtomicBoolean(false);
     Random random = new Random();
 
@@ -48,7 +51,7 @@ public abstract class Npc extends CreeperEntity {
         return colorName;
     }
 
-    protected Npc(GameManager gameManager, String name, String colorName, long lastPhraseTimestamp, Stats stats, String dieMessage, Optional<HashSet<Area>> roamAreas) {
+    protected Npc(GameManager gameManager, String name, String colorName, long lastPhraseTimestamp, Stats stats, String dieMessage, Optional<HashSet<Area>> roamAreas, Set<String> validTriggers) {
         this.gameManager = gameManager;
         this.name = name;
         this.colorName = colorName;
@@ -56,6 +59,11 @@ public abstract class Npc extends CreeperEntity {
         this.stats = stats;
         this.dieMessage = dieMessage;
         this.roamAreas = roamAreas;
+        this.validTriggers = validTriggers;
+    }
+
+    public Set<String> getValidTriggers() {
+        return validTriggers;
     }
 
     public Optional<HashSet<Area>> getRoamAreas() {
diff --git a/src/main/java/com/comandante/creeper/npc/StreetHustler.java b/src/main/java/com/comandante/creeper/npc/StreetHustler.java
new file mode 100644
index 00000000..5196874f
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/npc/StreetHustler.java
@@ -0,0 +1,35 @@
+package com.comandante.creeper.npc;
+
+import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.room.Area;
+import com.comandante.creeper.server.Color;
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import static com.comandante.creeper.server.Color.BRIGHT_RED;
+import static com.comandante.creeper.server.Color.GREEN;
+import static com.comandante.creeper.server.Color.RESET;
+
+public class StreetHustler extends Npc {
+    private final static long phraseIntervalMs = 300000;
+    private final static String NAME = "street hustler";
+    private final static Set<String> validTriggers = new HashSet<String>(Arrays.asList(new String[]
+            {"s", "street", "hustler", NAME}
+    ));
+
+    private final static String colorName = GREEN + "s" + Color.YELLOW + "t" + Color.BLUE + "r" + Color.MAGENTA + "e" + Color.BRIGHT_WHITE + "e" + Color.RED + "t" + Color.BRIGHT_GREEN + " hustler" + RESET;
+    private final static String dieMessage = "a " + colorName + " breathes his last breath in a pool of " + BRIGHT_RED + "blood" + RESET;
+
+    public StreetHustler(GameManager gameManager) {
+        super(gameManager, NAME, colorName, 0, NpcStats.DRUGGED_PIMP.createStats(), dieMessage, Optional.of(Sets.newHashSet(Area.NEWBIE_ZONE)), validTriggers);
+    }
+
+    @Override
+    public StreetHustler create(GameManager gameManager) {
+        return new StreetHustler(gameManager);
+    }
+}
diff --git a/src/main/java/com/comandante/creeper/server/command/KillCommand.java b/src/main/java/com/comandante/creeper/server/command/KillCommand.java
index 0424fb34..2181b40a 100644
--- a/src/main/java/com/comandante/creeper/server/command/KillCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/KillCommand.java
@@ -47,7 +47,7 @@ public class KillCommand extends Command {
             Set<String> npcIds = playerCurrentRoom.getNpcIds();
             for (String npcId : npcIds) {
                 Npc npcEntity = getGameManager().getEntityManager().getNpcEntity(npcId);
-                if (npcEntity.getName().equals(target)) {
+                if (npcEntity.getValidTriggers().contains(target)) {
                     npcEntity.setIsInFight(true);
                     FightRun fightRun = new FightRun(player, npcEntity, getGameManager());
                     Future<FightResults> fight = getGameManager().getFightManager().fight(fightRun);
-- 
GitLab