diff --git a/serverdata/nge/conversation/imperial_recruiter.sdb b/serverdata/nge/conversation/imperial_recruiter.sdb index afb3aa557..d9bd69b68 100644 --- a/serverdata/nge/conversation/imperial_recruiter.sdb +++ b/serverdata/nge/conversation/imperial_recruiter.sdb @@ -1,4 +1,4 @@ -spawn_id conversation_id +conversation_id conversation_file TEXT TEXT imperial_recruiter imperial_recruiter/rebel_root imperial_recruiter imperial_recruiter/neutral_root diff --git a/serverdata/nge/conversation/rebel_recruiter.sdb b/serverdata/nge/conversation/rebel_recruiter.sdb index effd24ea6..f425294d5 100644 --- a/serverdata/nge/conversation/rebel_recruiter.sdb +++ b/serverdata/nge/conversation/rebel_recruiter.sdb @@ -1,4 +1,4 @@ -spawn_id conversation_id +conversation_id conversation_file TEXT TEXT rebel_recruiter rebel_recruiter/imperial_root rebel_recruiter rebel_recruiter/neutral_root diff --git a/serverdata/nge/conversation/spawn_conversation_map.msdb b/serverdata/nge/conversation/spawn_conversation_map.msdb index c1baa12ed..6e5e15cfb 100644 --- a/serverdata/nge/conversation/spawn_conversation_map.msdb +++ b/serverdata/nge/conversation/spawn_conversation_map.msdb @@ -1,4 +1,4 @@ file enabled TEXT BOOLEAN rebel_recruiter.sdb TRUE -imperial_recruiter.sdb TRUE \ No newline at end of file +imperial_recruiter.sdb TRUE \ No newline at end of file diff --git a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/ConversationLoader.java b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/ConversationLoader.java index 7db173a12..75fc88d55 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/ConversationLoader.java +++ b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/ConversationLoader.java @@ -62,28 +62,28 @@ public class ConversationLoader extends DataLoader { } @Nullable - public Conversation getConversation(String conversationId) { + public Conversation getConversation(String conversationFile) { try { - InputStream inputStream = new FileInputStream("serverdata/nge/conversation/" + conversationId + ".json"); + InputStream inputStream = new FileInputStream("serverdata/nge/conversation/" + conversationFile + ".json"); JSONObject jsonObject = JSON.readObject(inputStream); - return readConversation(conversationId, jsonObject); + return readConversation(conversationFile, jsonObject); } catch (Throwable t) { - Log.e("Unable to load conversation by ID %s", conversationId); + Log.e("Unable to load conversation from file %s", conversationFile); Log.e(t); return null; } } @NotNull - public List getInitialConversations(String spawnId) { - if (!spawnConversationsMap.containsKey(spawnId)) { + public List getInitialConversations(String conversationId) { + if (!spawnConversationsMap.containsKey(conversationId)) { return Collections.emptyList(); } - Collection conversationIds = spawnConversationsMap.get(spawnId); + Collection conversationFiles = spawnConversationsMap.get(conversationId); - return conversationIds.stream() + return conversationFiles.stream() .map(this::getConversation) .filter(Objects::nonNull) .collect(Collectors.toList()); @@ -94,8 +94,8 @@ public class ConversationLoader extends DataLoader { return spawnConversationsMap.getOrDefault(spawnId, Collections.emptyList()); } - private Conversation readConversation(String conversationId, JSONObject jsonObject) { - Conversation conversation = new Conversation(conversationId); + private Conversation readConversation(String conversationFile, JSONObject jsonObject) { + Conversation conversation = new Conversation(conversationFile); Map npcMessageObj = (Map) jsonObject.get("npcMessage"); @@ -199,10 +199,10 @@ public class ConversationLoader extends DataLoader { private void loadSpawnToConversations() throws IOException { try (SdbLoader.SdbResultSet set = SdbLoader.load(new File("serverdata/nge/conversation/spawn_conversation_map.msdb"))) { while (set.next()) { - String spawnId = set.getText("spawn_id"); String conversationId = set.getText("conversation_id"); + String conversationFile = set.getText("conversation_file"); - spawnConversationsMap.computeIfAbsent(spawnId, a -> new ArrayList<>()).add(conversationId); + spawnConversationsMap.computeIfAbsent(conversationId, a -> new ArrayList<>()).add(conversationFile); } } } diff --git a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/npc/NpcStaticSpawnLoader.java b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/npc/NpcStaticSpawnLoader.java index d125a27cb..5be4b8efa 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/npc/NpcStaticSpawnLoader.java +++ b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/npc/NpcStaticSpawnLoader.java @@ -96,6 +96,7 @@ public final class NpcStaticSpawnLoader extends DataLoader { private final int minSpawnTime; private final int maxSpawnTime; private final int amount; + private final String conversationId; private StaticSpawnInfo(SdbResultSet set) { this.id = set.getText("spawn_id"); @@ -145,6 +146,8 @@ public final class NpcStaticSpawnLoader extends DataLoader { this.difficulty = CreatureDifficulty.BOSS; break; } + + this.conversationId = set.getText("conversation_id"); } @Override @@ -257,6 +260,11 @@ public final class NpcStaticSpawnLoader extends DataLoader { return amount; } + @Override + public String getConversationId() { + return conversationId; + } + private static PatrolFormation parsePatrolFormation(String str) { switch (str.toUpperCase(Locale.US)) { case "COLUMN": diff --git a/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SimpleSpawnInfo.java b/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SimpleSpawnInfo.java index 6c321b888..6ba54e324 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SimpleSpawnInfo.java +++ b/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SimpleSpawnInfo.java @@ -175,8 +175,13 @@ public class SimpleSpawnInfo implements SpawnInfo { public int getAmount() { return amount; } - - public static class Builder { + + @Override + public String getConversationId() { + return null; + } + + public static class Builder { private final SimpleSpawnInfo info; diff --git a/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SpawnInfo.java b/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SpawnInfo.java index a76c79f26..e618acac0 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SpawnInfo.java +++ b/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/SpawnInfo.java @@ -75,5 +75,7 @@ public interface SpawnInfo { int getMaxSpawnTime(); int getAmount(); + + String getConversationId(); } diff --git a/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/Spawner.kt b/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/Spawner.kt index dfb2e0f82..a7c59615b 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/Spawner.kt +++ b/src/main/java/com/projectswg/holocore/resources/support/npc/spawn/Spawner.kt @@ -126,7 +126,10 @@ class Spawner(spawn: SpawnInfo, egg: SWGObject) { val maxLevel: Int get() = spawn.maxLevel - + + val conversationId: String + get() = spawn.conversationId + val name: String get() = npc.name @@ -198,7 +201,7 @@ class Spawner(spawn: SpawnInfo, egg: SWGObject) { val creatureInfo: CreatureNpcInfo get() = npc.creatureInfo - + init { if (spawn.patrolId.isEmpty() || spawn.patrolId == "0") { // TODO: Replace the latter with empty string this.patrolRoute = null diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/conversation/ConversationService.java b/src/main/java/com/projectswg/holocore/services/gameplay/conversation/ConversationService.java index cb95345c4..b4d84bd68 100644 --- a/src/main/java/com/projectswg/holocore/services/gameplay/conversation/ConversationService.java +++ b/src/main/java/com/projectswg/holocore/services/gameplay/conversation/ConversationService.java @@ -138,14 +138,14 @@ public class ConversationService extends Service { CreatureObject starter = intent.getStarter(); Spawner spawner = npc.getSpawner(); - String spawnId = spawner.getId(); + String conversationId = spawner.getConversationId(); - List conversations = conversationLoader.getInitialConversations(spawnId); + List conversations = conversationLoader.getInitialConversations(conversationId); Conversation conversation = reduce(conversations, starter.getOwner()); if (conversation == null) { - StandardLog.onPlayerEvent(this, starter, "No eligible conversations for spawnId %s", spawnId); + StandardLog.onPlayerEvent(this, starter, "No eligible conversations for spawner with ID %s", spawner.getId()); return; } @@ -194,9 +194,9 @@ public class ConversationService extends Service { private boolean isConversableNpc(AIObject npc) { ConversationLoader conversationLoader = ServerData.INSTANCE.getConversationLoader(); Spawner spawner = npc.getSpawner(); - String spawnId = spawner.getId(); + String conversationId = spawner.getConversationId(); - Collection spawnConversationIds = conversationLoader.getConversationIds(spawnId); + Collection spawnConversationIds = conversationLoader.getConversationIds(conversationId); return !spawnConversationIds.isEmpty(); }