Rename and clean up MapleSkillbookInformationProvider

This commit is contained in:
P0nk
2021-09-09 22:49:57 +02:00
parent a4d3f17efb
commit ca4bcd80d1
3 changed files with 41 additions and 41 deletions

View File

@@ -56,7 +56,7 @@ import net.server.world.World;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import server.CashShop.CashItemFactory; import server.CashShop.CashItemFactory;
import server.MapleSkillbookInformationProvider; import server.SkillbookInformationProvider;
import server.ThreadManager; import server.ThreadManager;
import server.TimerManager; import server.TimerManager;
import server.expeditions.ExpeditionBossLog; import server.expeditions.ExpeditionBossLog;
@@ -840,7 +840,7 @@ public class Server {
futures.add(initExecutor.submit(() -> SkillFactory.loadAllSkills())); futures.add(initExecutor.submit(() -> SkillFactory.loadAllSkills()));
futures.add(initExecutor.submit(() -> CashItemFactory.loadAllCashItems())); futures.add(initExecutor.submit(() -> CashItemFactory.loadAllCashItems()));
futures.add(initExecutor.submit(() -> Quest.loadAllQuests())); futures.add(initExecutor.submit(() -> Quest.loadAllQuests()));
futures.add(initExecutor.submit(() -> MapleSkillbookInformationProvider.loadAllSkillbookInformation())); futures.add(initExecutor.submit(() -> SkillbookInformationProvider.loadAllSkillbookInformation()));
futures.add(initExecutor.submit(() -> PlayerNPCFactory.loadFactoryMetadata())); futures.add(initExecutor.submit(() -> PlayerNPCFactory.loadFactoryMetadata()));
TimeZone.setDefault(TimeZone.getTimeZone(YamlConfig.config.server.TIMEZONE)); TimeZone.setDefault(TimeZone.getTimeZone(YamlConfig.config.server.TIMEZONE));

View File

@@ -43,7 +43,7 @@ import provider.DataProviderFactory;
import provider.wz.WZFiles; import provider.wz.WZFiles;
import scripting.AbstractPlayerInteraction; import scripting.AbstractPlayerInteraction;
import server.*; import server.*;
import server.MapleSkillbookInformationProvider.SkillBookEntry; import server.SkillbookInformationProvider.SkillBookEntry;
import server.events.gm.Event; import server.events.gm.Event;
import server.expeditions.Expedition; import server.expeditions.Expedition;
import server.expeditions.ExpeditionType; import server.expeditions.ExpeditionType;
@@ -572,7 +572,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
public Object[] getAvailableSkillBooks() { public Object[] getAvailableSkillBooks() {
List<Integer> ret = ItemInformationProvider.getInstance().usableSkillBooks(this.getPlayer()); List<Integer> ret = ItemInformationProvider.getInstance().usableSkillBooks(this.getPlayer());
ret.addAll(MapleSkillbookInformationProvider.getTeachableSkills(this.getPlayer())); ret.addAll(SkillbookInformationProvider.getTeachableSkills(this.getPlayer()));
return ret.toArray(); return ret.toArray();
} }
@@ -582,7 +582,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
} }
public String getSkillBookInfo(int itemid) { public String getSkillBookInfo(int itemid) {
SkillBookEntry sbe = MapleSkillbookInformationProvider.getSkillbookAvailability(itemid); SkillBookEntry sbe = SkillbookInformationProvider.getSkillbookAvailability(itemid);
switch (sbe) { switch (sbe) {
case UNAVAILABLE: case UNAVAILABLE:
return ""; return "";

View File

@@ -38,16 +38,15 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
/** /**
* Only used in 1 script that gives players information about where skillbooks can be found * Only used in 1 script that gives players information about where skillbooks can be found
*/ */
public class MapleSkillbookInformationProvider { public class SkillbookInformationProvider {
private static volatile Map<Integer, SkillBookEntry> foundSkillbooks = new HashMap<>(); private static volatile Map<Integer, SkillBookEntry> foundSkillbooks = new HashMap<>();
public enum SkillBookEntry { public enum SkillBookEntry {
UNAVAILABLE, UNAVAILABLE,
QUEST, QUEST,
@@ -56,7 +55,7 @@ public class MapleSkillbookInformationProvider {
REACTOR, REACTOR,
SCRIPT SCRIPT
} }
private static final int SKILLBOOK_MIN_ITEMID = 2280000; private static final int SKILLBOOK_MIN_ITEMID = 2280000;
private static final int SKILLBOOK_MAX_ITEMID = 2300000; // exclusively private static final int SKILLBOOK_MAX_ITEMID = 2300000; // exclusively
@@ -65,24 +64,24 @@ public class MapleSkillbookInformationProvider {
loadedSkillbooks.putAll(fetchSkillbooksFromQuests()); loadedSkillbooks.putAll(fetchSkillbooksFromQuests());
loadedSkillbooks.putAll(fetchSkillbooksFromReactors()); loadedSkillbooks.putAll(fetchSkillbooksFromReactors());
loadedSkillbooks.putAll(fetchSkillbooksFromScripts()); loadedSkillbooks.putAll(fetchSkillbooksFromScripts());
MapleSkillbookInformationProvider.foundSkillbooks = loadedSkillbooks; SkillbookInformationProvider.foundSkillbooks = loadedSkillbooks;
} }
private static boolean is4thJobSkill(int itemid) { private static boolean is4thJobSkill(int itemid) {
return itemid / 10000 % 10 == 2; return itemid / 10000 % 10 == 2;
} }
private static boolean isSkillBook(int itemid) { private static boolean isSkillBook(int itemid) {
return itemid >= SKILLBOOK_MIN_ITEMID && itemid < SKILLBOOK_MAX_ITEMID; return itemid >= SKILLBOOK_MIN_ITEMID && itemid < SKILLBOOK_MAX_ITEMID;
} }
private static boolean isQuestBook(int itemid) { private static boolean isQuestBook(int itemid) {
return itemid >= 4001107 && itemid <= 4001114 || itemid >= 4161015 && itemid <= 4161023; return itemid >= 4001107 && itemid <= 4001114 || itemid >= 4161015 && itemid <= 4161023;
} }
private static int fetchQuestbook(Data checkData, String quest) { private static int fetchQuestbook(Data checkData, String quest) {
Data questStartData = checkData.getChildByPath(quest).getChildByPath("0"); Data questStartData = checkData.getChildByPath(quest).getChildByPath("0");
Data startReqItemData = questStartData.getChildByPath("item"); Data startReqItemData = questStartData.getChildByPath("item");
if (startReqItemData != null) { if (startReqItemData != null) {
for (Data itemData : startReqItemData.getChildren()) { for (Data itemData : startReqItemData.getChildren()) {
@@ -92,18 +91,18 @@ public class MapleSkillbookInformationProvider {
} }
} }
} }
Data startReqQuestData = questStartData.getChildByPath("quest"); Data startReqQuestData = questStartData.getChildByPath("quest");
if (startReqQuestData != null) { if (startReqQuestData != null) {
Set<Integer> reqQuests = new HashSet<>(); Set<Integer> reqQuests = new HashSet<>();
for (Data questStatusData : startReqQuestData.getChildren()) { for (Data questStatusData : startReqQuestData.getChildren()) {
int reqQuest = DataTool.getInt("id", questStatusData, 0); int reqQuest = DataTool.getInt("id", questStatusData, 0);
if (reqQuest > 0) { if (reqQuest > 0) {
reqQuests.add(reqQuest); reqQuests.add(reqQuest);
} }
} }
for (Integer reqQuest : reqQuests) { for (Integer reqQuest : reqQuests) {
int book = fetchQuestbook(checkData, Integer.toString(reqQuest)); int book = fetchQuestbook(checkData, Integer.toString(reqQuest));
if (book > -1) { if (book > -1) {
@@ -111,10 +110,10 @@ public class MapleSkillbookInformationProvider {
} }
} }
} }
return -1; return -1;
} }
private static Map<Integer, SkillBookEntry> fetchSkillbooksFromQuests() { private static Map<Integer, SkillBookEntry> fetchSkillbooksFromQuests() {
DataProvider questDataProvider = DataProviderFactory.getDataProvider(WZFiles.QUEST); DataProvider questDataProvider = DataProviderFactory.getDataProvider(WZFiles.QUEST);
Data actData = questDataProvider.getData("Act.img"); Data actData = questDataProvider.getData("Act.img");
@@ -129,7 +128,7 @@ public class MapleSkillbookInformationProvider {
for (Data questItemData : questNodeData.getChildren()) { for (Data questItemData : questNodeData.getChildren()) {
int itemId = DataTool.getInt("id", questItemData, 0); int itemId = DataTool.getInt("id", questItemData, 0);
int itemCount = DataTool.getInt("count", questItemData, 0); int itemCount = DataTool.getInt("count", questItemData, 0);
if (isSkillBook(itemId) && itemCount > 0) { if (isSkillBook(itemId) && itemCount > 0) {
int questbook = fetchQuestbook(checkData, questData.getName()); int questbook = fetchQuestbook(checkData, questData.getName());
if (questbook < 0) { if (questbook < 0) {
@@ -144,7 +143,7 @@ public class MapleSkillbookInformationProvider {
int skillId = DataTool.getInt("id", questSkillData, 0); int skillId = DataTool.getInt("id", questSkillData, 0);
if (is4thJobSkill(skillId)) { if (is4thJobSkill(skillId)) {
// negative itemids are skill rewards // negative itemids are skill rewards
int questbook = fetchQuestbook(checkData, questData.getName()); int questbook = fetchQuestbook(checkData, questData.getName());
if (questbook < 0) { if (questbook < 0) {
loadedSkillbooks.put(-skillId, SkillBookEntry.QUEST_REWARD); loadedSkillbooks.put(-skillId, SkillBookEntry.QUEST_REWARD);
@@ -160,7 +159,7 @@ public class MapleSkillbookInformationProvider {
return loadedSkillbooks; return loadedSkillbooks;
} }
private static Map<Integer, SkillBookEntry> fetchSkillbooksFromReactors() { private static Map<Integer, SkillBookEntry> fetchSkillbooksFromReactors() {
Map<Integer, SkillBookEntry> loadedSkillbooks = new HashMap<>(); Map<Integer, SkillBookEntry> loadedSkillbooks = new HashMap<>();
@@ -182,7 +181,7 @@ public class MapleSkillbookInformationProvider {
return loadedSkillbooks; return loadedSkillbooks;
} }
private static void listFiles(String directoryName, ArrayList<File> files) { private static void listFiles(String directoryName, ArrayList<File> files) {
File directory = new File(directoryName); File directory = new File(directoryName);
@@ -196,27 +195,27 @@ public class MapleSkillbookInformationProvider {
} }
} }
} }
private static List<File> listFilesFromDirectoryRecursively(String directory) { private static List<File> listFilesFromDirectoryRecursively(String directory) {
ArrayList<File> files = new ArrayList<>(); ArrayList<File> files = new ArrayList<>();
listFiles(directory, files); listFiles(directory, files);
return files; return files;
} }
private static Set<Integer> findMatchingSkillbookIdsOnFile(String fileContent) { private static Set<Integer> findMatchingSkillbookIdsOnFile(String fileContent) {
Set<Integer> skillbookIds = new HashSet<>(4); Set<Integer> skillbookIds = new HashSet<>(4);
Matcher searchM = Pattern.compile("22(8|9)[0-9]{4}").matcher(fileContent); Matcher searchM = Pattern.compile("22(8|9)[0-9]{4}").matcher(fileContent);
int idx = 0; int idx = 0;
while (searchM.find(idx)) { while (searchM.find(idx)) {
idx = searchM.end(); idx = searchM.end();
skillbookIds.add(Integer.valueOf(fileContent.substring(searchM.start(), idx))); skillbookIds.add(Integer.valueOf(fileContent.substring(searchM.start(), idx)));
} }
return skillbookIds; return skillbookIds;
} }
private static String readFileToString(File file, String encoding) throws IOException { private static String readFileToString(File file, String encoding) throws IOException {
Scanner scanner = new Scanner(file, encoding); Scanner scanner = new Scanner(file, encoding);
String text = ""; String text = "";
@@ -226,17 +225,18 @@ public class MapleSkillbookInformationProvider {
} finally { } finally {
scanner.close(); scanner.close();
} }
} catch (NoSuchElementException e) {} } catch (NoSuchElementException e) {
}
return text; return text;
} }
private static Map<Integer, SkillBookEntry> fileSearchMatchingData(File file) { private static Map<Integer, SkillBookEntry> fileSearchMatchingData(File file) {
Map<Integer, SkillBookEntry> scriptFileSkillbooks = new HashMap<>(); Map<Integer, SkillBookEntry> scriptFileSkillbooks = new HashMap<>();
try { try {
String fileContent = readFileToString(file, "UTF-8"); String fileContent = readFileToString(file, "UTF-8");
Set<Integer> skillbookIds = findMatchingSkillbookIdsOnFile(fileContent); Set<Integer> skillbookIds = findMatchingSkillbookIdsOnFile(fileContent);
for (Integer skillbookId : skillbookIds) { for (Integer skillbookId : skillbookIds) {
scriptFileSkillbooks.put(skillbookId, SkillBookEntry.SCRIPT); scriptFileSkillbooks.put(skillbookId, SkillBookEntry.SCRIPT);
@@ -248,7 +248,7 @@ public class MapleSkillbookInformationProvider {
return scriptFileSkillbooks; return scriptFileSkillbooks;
} }
private static Map<Integer, SkillBookEntry> fetchSkillbooksFromScripts() { private static Map<Integer, SkillBookEntry> fetchSkillbooksFromScripts() {
Map<Integer, SkillBookEntry> scriptSkillbooks = new HashMap<>(); Map<Integer, SkillBookEntry> scriptSkillbooks = new HashMap<>();
@@ -260,20 +260,20 @@ public class MapleSkillbookInformationProvider {
return scriptSkillbooks; return scriptSkillbooks;
} }
public static SkillBookEntry getSkillbookAvailability(int itemId) { public static SkillBookEntry getSkillbookAvailability(int itemId) {
SkillBookEntry sbe = foundSkillbooks.get(itemId); SkillBookEntry sbe = foundSkillbooks.get(itemId);
return sbe != null ? sbe : SkillBookEntry.UNAVAILABLE; return sbe != null ? sbe : SkillBookEntry.UNAVAILABLE;
} }
public static List<Integer> getTeachableSkills(Character chr) { public static List<Integer> getTeachableSkills(Character chr) {
List<Integer> list = new ArrayList<>(); List<Integer> list = new ArrayList<>();
for (Integer book : foundSkillbooks.keySet()) { for (Integer book : foundSkillbooks.keySet()) {
if (book >= 0) { if (book >= 0) {
continue; continue;
} }
int skillid = -book; int skillid = -book;
if (skillid / 10000 == chr.getJob().getId()) { if (skillid / 10000 == chr.getJob().getId()) {
if (chr.getMasterLevel(skillid) == 0) { if (chr.getMasterLevel(skillid) == 0) {
@@ -281,8 +281,8 @@ public class MapleSkillbookInformationProvider {
} }
} }
} }
return list; return list;
} }
} }