} else if (sub[0].equalsIgnoreCase("search")) {
if (sub.length > 2) {
String search = joinStringFrom(sub, 2);
MapleData data = null;
MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File("wz/String.wz"));
chr.dropMessage("~Searching~ <<Type: " + sub[1] + " | Search: " + search + ">>");
if (!sub[1].equalsIgnoreCase("ITEM")) {
if (sub[1].equalsIgnoreCase("NPC")) {
data = dataProvider.getData("Npc.img");
} else if (sub[1].equalsIgnoreCase("MAP")) {
data = dataProvider.getData("Map.img");
} else if (sub[1].equalsIgnoreCase("MOB")) {
List<String> retMobs = new LinkedList<String>();
data = dataProvider.getData("Mob.img");
List<Pair<Integer, String>> mobPairList = new LinkedList<Pair<Integer, String>>();
for (MapleData mobIdData : data.getChildren()) {
int mobIdFromData = Integer.parseInt(mobIdData.getName());
String mobNameFromData = MapleDataTool.getString(mobIdData.getChildByPath("name"), "NO-NAME");
mobPairList.add(new Pair<Integer, String>(mobIdFromData, mobNameFromData));
}
for (Pair<Integer, String> mobPair : mobPairList) {
if (mobPair.getRight().toLowerCase().contains(search.toLowerCase())) {
retMobs.add(mobPair.getLeft() + " - " + mobPair.getRight());
}
}
if (retMobs != null && retMobs.size() > 0) {
for (String singleRetMob : retMobs) {
chr.dropMessage(singleRetMob);
}
} else {
chr.dropMessage("No Mob's Found");
}
} else if (sub[1].equalsIgnoreCase("SKILL")) {
data = dataProvider.getData("Skill.img");
} else {
chr.dropMessage("Invalid search.\nSyntax: '!search [type] [name]', where [type] is NPC, MAP, ITEM, MOB, or SKILL.");
return true;
}
List<Pair<Integer, String>> searchList = new LinkedList<Pair<Integer, String>>();
for (MapleData searchData : data.getChildren()) {
int searchFromData = Integer.parseInt(searchData.getName());
String infoFromData = sub[1].equalsIgnoreCase("MAP") ? MapleDataTool.getString(searchData.getChildByPath("streetName"), "NO-NAME") + " - " + MapleDataTool.getString(searchData.getChildByPath("mapName"), "NO-NAME") : MapleDataTool.getString(searchData.getChildByPath("name"), "NO-NAME");
searchList.add(new Pair<Integer, String>(searchFromData, infoFromData));
}
for (Pair<Integer, String> searched : searchList) {
if (searched.getRight().toLowerCase().contains(search.toLowerCase())) {
chr.dropMessage(searched.getLeft() + " - " + searched.getRight());
}
}
} else {
for (Pair<Integer, String> itemPair : MapleItemInformationProvider.getInstance().getAllItems()) {
if (itemPair.getRight().toLowerCase().contains(search.toLowerCase())) {
chr.dropMessage(itemPair.getLeft() + " - " + itemPair.getRight());
}
}
chr.dropMessage("Search Complete.");
}
} else {
chr.dropMessage("Invalid search.\nSyntax: '!search [type] [name]', where [type] is NPC, MAP, ITEM, MOB, or SKILL.");
}
} else if (sub[0].equals("map")) {
int mapid = Integer.parseInt(sub[1]);
MapleMap target = cserv.getMapFactory().getMap(mapid);
MaplePortal targetPortal = null;
if (sub.length > 2) {
try {
targetPortal = target.getPortal(Integer.parseInt(sub[2]));
} catch (IndexOutOfBoundsException nfe) {
// noop, assume the gm didn't know how many portals there are
} catch (NumberFormatException nfe) {
// noop, assume that the gm is drunk
}
}
if (targetPortal == null) {
targetPortal = target.getPortal(0);
}
c.getPlayer().changeMap(target, targetPortal);