Add back in NPC conversation names

The names of the npc conversations were useful for context. Added them  back in.
This commit is contained in:
James McDowell
2021-05-26 19:41:27 +10:00
parent 9128329d37
commit e967294eb9
4 changed files with 17 additions and 10 deletions

View File

@@ -463,5 +463,5 @@ server:
#Any NPC ids that should search for a js override script (useful if they already have wz entries since otherwise they're ignored). #Any NPC ids that should search for a js override script (useful if they already have wz entries since otherwise they're ignored).
NPCS_SCRIPTABLE: NPCS_SCRIPTABLE:
#- 9200000 # Cody #9200000: Talk to Cody # Cody
- 9001105 # Grandpa moon bunny 9001105: Rescue Gaga! # Grandpa moon bunny

View File

@@ -308,5 +308,5 @@ public class ServerConfig {
public long EVENT_END_TIMESTAMP; public long EVENT_END_TIMESTAMP;
//Custom NPC overrides. List of NPC IDs. //Custom NPC overrides. List of NPC IDs.
public List<Integer> NPCS_SCRIPTABLE = new ArrayList<>(); public Map<String, String> NPCS_SCRIPTABLE = new HashMap<>();
} }

View File

@@ -54,6 +54,7 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.stream.Collectors;
public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
@@ -407,14 +408,19 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
} }
} }
// Tell the client to use the custom scripts available for the NPCs provided, instead of the WZ entries.
if (YamlConfig.config.server.USE_NPCS_SCRIPTABLE) { if (YamlConfig.config.server.USE_NPCS_SCRIPTABLE) {
// Create a set to remove duplicate entries if they exist. // Create a copy to prevent always adding entries to the server's list.
Set<Integer> npcsIds = new HashSet<>(YamlConfig.config.server.NPCS_SCRIPTABLE); Map<Integer, String> npcsIds = YamlConfig.config.server.NPCS_SCRIPTABLE
.entrySet().stream().collect(Collectors.toMap(
entry -> Integer.parseInt(entry.getKey()),
Entry::getValue
));
// Any npc be specified as the rebirth npc. Allow the npc to use custom scripts explicitly. // Any npc be specified as the rebirth npc. Allow the npc to use custom scripts explicitly.
if (YamlConfig.config.server.USE_REBIRTH_SYSTEM) { if (YamlConfig.config.server.USE_REBIRTH_SYSTEM) {
npcsIds.add(YamlConfig.config.server.REBIRTH_NPC_ID); npcsIds.put(YamlConfig.config.server.REBIRTH_NPC_ID, "Rebirth");
} }
c.announce(MaplePacketCreator.setNPCScriptable(npcsIds)); c.announce(MaplePacketCreator.setNPCScriptable(npcsIds));

View File

@@ -8326,13 +8326,14 @@ public class MaplePacketCreator {
* @param scriptableNpcIds Ids of npcs to enable scripts for. * @param scriptableNpcIds Ids of npcs to enable scripts for.
* @return a packet which makes the npc's provided scriptable. * @return a packet which makes the npc's provided scriptable.
*/ */
public static byte[] setNPCScriptable(Set<Integer> scriptableNpcIds) { // thanks to GabrielSin public static byte[] setNPCScriptable(Map<Integer, String> scriptableNpcIds) { // thanks to GabrielSin
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.SET_NPC_SCRIPTABLE.getValue()); mplew.writeShort(SendOpcode.SET_NPC_SCRIPTABLE.getValue());
mplew.write(scriptableNpcIds.size()); mplew.write(scriptableNpcIds.size());
scriptableNpcIds.forEach(id -> { scriptableNpcIds.forEach((id, name) -> {
mplew.writeInt(id); mplew.writeInt(id);
mplew.writeMapleAsciiString("NPC " + id); // The client needs a name for the npc, but it doesn't seem to do anything. // The client needs a name for the npc conversation, which is displayed under etc when the npc has a quest available.
mplew.writeMapleAsciiString(name);
mplew.writeInt(0); // start time mplew.writeInt(0); // start time
mplew.writeInt(Integer.MAX_VALUE); // end time mplew.writeInt(Integer.MAX_VALUE); // end time
}); });