Simplify NPC script start

This commit is contained in:
P0nk
2023-03-31 07:33:49 +02:00
parent c3badba73b
commit 699da37f06
7 changed files with 35 additions and 33 deletions

View File

@@ -36,9 +36,9 @@ public class ClickGuideHandler extends AbstractPacketHandler {
@Override
public void handlePacket(InPacket p, Client c) {
if (c.getPlayer().getJob().equals(Job.NOBLESSE)) {
NPCScriptManager.getInstance().start(c, NpcId.MIMO, null);
NPCScriptManager.getInstance().start(c, NpcId.MIMO);
} else {
NPCScriptManager.getInstance().start(c, NpcId.LILIN, null);
NPCScriptManager.getInstance().start(c, NpcId.LILIN);
}
}

View File

@@ -73,11 +73,11 @@ public final class NPCTalkHandler extends AbstractPacketHandler {
// Custom handling to reduce the amount of scripts needed.
if (npc.getId() >= NpcId.GACHAPON_MIN && npc.getId() <= NpcId.GACHAPON_MAX) {
NPCScriptManager.getInstance().start(c, npc.getId(), "gachapon", null);
NPCScriptManager.getInstance().start(c, npc.getId(), "gachapon");
} else if (npc.getName().endsWith("Maple TV")) {
NPCScriptManager.getInstance().start(c, npc.getId(), "mapleTV", null);
NPCScriptManager.getInstance().start(c, npc.getId(), "mapleTV");
} else if (YamlConfig.config.server.USE_REBIRTH_SYSTEM && npc.getId() == YamlConfig.config.server.REBIRTH_NPC_ID) {
NPCScriptManager.getInstance().start(c, npc.getId(), "rebirth", null);
NPCScriptManager.getInstance().start(c, npc.getId(), "rebirth");
} else {
boolean hasNpcScript = NPCScriptManager.getInstance().start(c, npc.getId(), oid, null);
if (!hasNpcScript) {
@@ -97,9 +97,9 @@ public final class NPCTalkHandler extends AbstractPacketHandler {
NPCScriptManager nsm = NPCScriptManager.getInstance();
if (pnpc.getScriptId() < NpcId.CUSTOM_DEV && !nsm.isNpcScriptAvailable(c, "" + pnpc.getScriptId())) {
nsm.start(c, pnpc.getScriptId(), "rank_user", null);
nsm.start(c, pnpc.getScriptId(), "rank_user");
} else {
nsm.start(c, pnpc.getScriptId(), null);
nsm.start(c, pnpc.getScriptId());
}
}
}

View File

@@ -57,6 +57,6 @@ public final class RemoteGachaponHandler extends AbstractPacketHandler {
} else {
npcId = gacha == 8 ? NpcId.GACHAPON_NLC : NpcId.GACHAPON_NAUTILUS;
}
NPCScriptManager.getInstance().start(c, npcId, "gachaponRemote", null);
NPCScriptManager.getInstance().start(c, npcId, "gachaponRemote");
}
}

View File

@@ -77,9 +77,9 @@ public class MatchCheckerCPQChallenge implements MatchCheckerListenerRecipe {
}
if (message.contentEquals("cpq1")) {
NPCScriptManager.getInstance().start("cpqchallenge", ldr.getClient(), npcid, chrMembers);
NPCScriptManager.getInstance().startCpqScript("cpqchallenge", ldr.getClient(), npcid, chrMembers);
} else {
NPCScriptManager.getInstance().start("cpqchallenge2", ldr.getClient(), npcid, chrMembers);
NPCScriptManager.getInstance().startCpqScript("cpqchallenge2", ldr.getClient(), npcid, chrMembers);
}
cm.sendOk(LanguageConstants.getMessage(chr, LanguageConstants.CPQChallengeRoomSent));

View File

@@ -352,7 +352,7 @@ public class AbstractPlayerInteraction {
c.removeClickedNPC();
NPCScriptManager.getInstance().dispose(c);
NPCScriptManager.getInstance().start(c, npcid, script, null);
NPCScriptManager.getInstance().start(c, npcid, script);
}
public int getQuestStatus(int id) {

View File

@@ -34,6 +34,6 @@ public class ItemScriptManager {
}
public void runItemScript(Client c, ScriptedItem scriptItem) {
NPCScriptManager.getInstance().start(c, scriptItem, null);
NPCScriptManager.getInstance().startItemScript(c, scriptItem);
}
}
}

View File

@@ -60,27 +60,27 @@ public class NPCScriptManager extends AbstractScriptManager {
return engine != null;
}
public boolean start(Client c, int npc, Character chr) {
return start(c, npc, -1, chr);
public void start(Client c, int npc) {
start(c, npc, -1, null);
}
public boolean start(Client c, int npc, int oid, Character chr) {
return start(c, npc, oid, null, chr);
return startNpcScript(c, npc, oid, null, chr);
}
public boolean start(Client c, int npc, String fileName, Character chr) {
return start(c, npc, -1, fileName, chr);
public boolean start(Client c, int npc, String fileName) {
return startNpcScript(c, npc, -1, fileName, null);
}
public boolean start(Client c, int npc, int oid, String fileName, Character chr) {
return start(c, npc, oid, fileName, chr, false, "cm");
public boolean startNpcScript(Client c, int npc, int oid, String fileName, Character chr) {
return startWithBindings(c, npc, oid, fileName, chr, false, "cm");
}
public boolean start(Client c, ScriptedItem scriptItem, Character chr) {
return start(c, scriptItem.getNpc(), -1, scriptItem.getScript(), chr, true, "im");
public boolean startItemScript(Client c, ScriptedItem scriptItem) {
return startWithBindings(c, scriptItem.getNpc(), -1, scriptItem.getScript(), null, true, "im");
}
public void start(String filename, Client c, int npc, List<PartyCharacter> chrs) {
public void startCpqScript(String filename, Client c, int npc, List<PartyCharacter> chrs) {
try {
final NPCConversationManager cm = new NPCConversationManager(c, npc);
cm.dispose();
@@ -111,7 +111,7 @@ public class NPCScriptManager extends AbstractScriptManager {
}
}
private boolean start(Client c, int npc, int oid, String fileName, Character chr, boolean itemScript, String engineName) {
private boolean startWithBindings(Client c, int npc, int oid, String fileName, Character chr, boolean itemScript, String engineName) {
try {
final NPCConversationManager cm = new NPCConversationManager(c, npc, oid, fileName, itemScript);
if (cms.containsKey(c)) {
@@ -165,16 +165,18 @@ public class NPCScriptManager extends AbstractScriptManager {
public void action(Client c, byte mode, byte type, int selection) {
Invocable iv = scripts.get(c);
if (iv != null) {
try {
c.setClickedNPC();
iv.invokeFunction("action", mode, type, selection);
} catch (ScriptException | NoSuchMethodException t) {
if (getCM(c) != null) {
log.error("Error performing NPC script action for npc: {}", getCM(c).getNpc(), t);
}
dispose(c);
if (iv == null) {
return;
}
try {
c.setClickedNPC();
iv.invokeFunction("action", mode, type, selection);
} catch (ScriptException | NoSuchMethodException t) {
if (getCM(c) != null) {
log.error("Error performing NPC script action for npc: {}", getCM(c).getNpc(), t);
}
dispose(c);
}
}