Rename and clean up MapleSkillbookInformationProvider
This commit is contained in:
@@ -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));
|
||||||
|
|||||||
@@ -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 "";
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user