Search in sources :

Example 1 with MapleDataProvider

use of provider.MapleDataProvider in project HeavenMS by ronancpl.

the class MapleMonsterInformationProvider method getMobsIDsFromName.

public static ArrayList<Pair<Integer, String>> getMobsIDsFromName(String search) {
    MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File("wz/String.wz"));
    ArrayList<Pair<Integer, String>> retMobs = new ArrayList<Pair<Integer, String>>();
    MapleData 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);
        }
    }
    return retMobs;
}
Also used : MapleData(provider.MapleData) ArrayList(java.util.ArrayList) MapleDataProvider(provider.MapleDataProvider) File(java.io.File) LinkedList(java.util.LinkedList) Pair(tools.Pair)

Example 2 with MapleDataProvider

use of provider.MapleDataProvider in project HeavenMS by ronancpl.

the class DataTool method monsterIdsFromName.

public static ArrayList<Integer> monsterIdsFromName(String name) {
    MapleData data = null;
    MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz"));
    ArrayList<Integer> ret = new ArrayList<>();
    data = dataProvider.getData("Mob.img");
    if (mob_pairs == null) {
        mob_pairs = new LinkedList<>();
        for (MapleData mobIdData : data.getChildren()) {
            int mobIdFromData = Integer.parseInt(mobIdData.getName());
            String mobNameFromData = MapleDataTool.getString(mobIdData.getChildByPath("name"), "NO-NAME");
            mob_pairs.add(new Pair<>(mobIdFromData, mobNameFromData));
        }
    }
    for (Pair<Integer, String> mobPair : mob_pairs) {
        if (mobPair.getRight().toLowerCase().equals(name.toLowerCase())) {
            ret.add(mobPair.getLeft());
        }
    }
    return ret;
}
Also used : MapleData(provider.MapleData) ArrayList(java.util.ArrayList) MapleDataProvider(provider.MapleDataProvider) File(java.io.File)

Example 3 with MapleDataProvider

use of provider.MapleDataProvider in project HeavenMS by ronancpl.

the class DataTool method npcIdsFromName.

public static ArrayList<Integer> npcIdsFromName(String name) {
    MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz"));
    ArrayList<Integer> ret = new ArrayList<>();
    if (npc_list == null) {
        ArrayList<Pair<Integer, String>> searchList = new ArrayList<>();
        for (MapleData searchData : dataProvider.getData("Npc.img").getChildren()) {
            int searchFromData = Integer.parseInt(searchData.getName());
            String infoFromData = MapleDataTool.getString(searchData.getChildByPath("name"), "NO-NAME");
            searchList.add(new Pair<>(searchFromData, infoFromData));
        }
        npc_list = searchList;
    }
    for (Pair<Integer, String> searched : npc_list) {
        if (searched.getRight().toLowerCase().contains(name.toLowerCase())) {
            ret.add(searched.getLeft());
        }
    }
    return ret;
}
Also used : MapleData(provider.MapleData) ArrayList(java.util.ArrayList) MapleDataProvider(provider.MapleDataProvider) File(java.io.File) Pair(tools.Pair)

Example 4 with MapleDataProvider

use of provider.MapleDataProvider in project HeavenMS by ronancpl.

the class Commands method executeHeavenMsCommandLv2.

public static boolean executeHeavenMsCommandLv2(Channel cserv, Server srv, MapleClient c, String[] sub) {
    // JrGM
    MapleCharacter player = c.getPlayer();
    MapleCharacter victim;
    Skill skill;
    switch(sub[0]) {
        case "hide":
            SkillFactory.getSkill(9101004).getEffect(SkillFactory.getSkill(9101004).getMaxLevel()).applyTo(player);
            break;
        case "unhide":
            SkillFactory.getSkill(9101004).getEffect(SkillFactory.getSkill(9101004).getMaxLevel()).applyTo(player);
            break;
        case "sp":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !sp [<playername>] <newsp>");
                break;
            }
            if (sub.length == 2) {
                int newSp = Integer.parseInt(sub[1]);
                if (newSp < 0)
                    newSp = 0;
                else if (newSp > ServerConstants.MAX_AP)
                    newSp = ServerConstants.MAX_AP;
                player.setRemainingSp(newSp);
                player.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
            } else {
                victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
                if (victim != null) {
                    int newSp = Integer.parseInt(sub[2]);
                    if (newSp < 0)
                        newSp = 0;
                    else if (newSp > ServerConstants.MAX_AP)
                        newSp = ServerConstants.MAX_AP;
                    victim.setRemainingSp(newSp);
                    victim.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
                    player.dropMessage(5, "SP given.");
                } else {
                    player.message("Player '" + sub[1] + "' could not be found on this channel.");
                }
            }
            break;
        case "ap":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !ap [<playername>] <newap>");
                break;
            }
            if (sub.length < 3) {
                int newAp = Integer.parseInt(sub[1]);
                if (newAp < 0)
                    newAp = 0;
                else if (newAp > ServerConstants.MAX_AP)
                    newAp = ServerConstants.MAX_AP;
                player.setRemainingAp(newAp);
                player.updateSingleStat(MapleStat.AVAILABLEAP, player.getRemainingAp());
            } else {
                victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
                if (victim != null) {
                    int newAp = Integer.parseInt(sub[2]);
                    if (newAp < 0)
                        newAp = 0;
                    else if (newAp > ServerConstants.MAX_AP)
                        newAp = ServerConstants.MAX_AP;
                    victim.setRemainingAp(newAp);
                    victim.updateSingleStat(MapleStat.AVAILABLEAP, victim.getRemainingAp());
                } else {
                    player.message("Player '" + sub[1] + "' could not be found on this channel.");
                }
            }
            break;
        case "empowerme":
            final int[] array = { 2311003, 2301004, 1301007, 4101004, 2001002, 1101007, 1005, 2301003, 5121009, 1111002, 4111001, 4111002, 4211003, 4211005, 1321000, 2321004, 3121002 };
            for (int i : array) {
                SkillFactory.getSkill(i).getEffect(SkillFactory.getSkill(i).getMaxLevel()).applyTo(player);
            }
            break;
        case "buffmap":
            SkillFactory.getSkill(9101001).getEffect(SkillFactory.getSkill(9101001).getMaxLevel()).applyTo(player, true);
            SkillFactory.getSkill(9101002).getEffect(SkillFactory.getSkill(9101002).getMaxLevel()).applyTo(player, true);
            SkillFactory.getSkill(9101003).getEffect(SkillFactory.getSkill(9101003).getMaxLevel()).applyTo(player, true);
            SkillFactory.getSkill(9101008).getEffect(SkillFactory.getSkill(9101008).getMaxLevel()).applyTo(player, true);
            SkillFactory.getSkill(1005).getEffect(SkillFactory.getSkill(1005).getMaxLevel()).applyTo(player, true);
            break;
        case "buff":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !buff <buffid>");
                break;
            }
            int skillid = Integer.parseInt(sub[1]);
            skill = SkillFactory.getSkill(skillid);
            if (skill != null)
                skill.getEffect(skill.getMaxLevel()).applyTo(player);
            break;
        case "bomb":
            if (sub.length > 1) {
                victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
                if (victim != null) {
                    victim.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300166), victim.getPosition());
                    Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, player.getName() + " used !bomb on " + victim.getName()));
                } else {
                    player.message("Player '" + sub[1] + "' could not be found on this world.");
                }
            } else {
                player.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300166), player.getPosition());
            }
            break;
        case "dc":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !dc <playername>");
                break;
            }
            victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
            if (victim == null) {
                victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
                if (victim == null) {
                    victim = player.getMap().getCharacterByName(sub[1]);
                    if (victim != null) {
                        try {
                            // sometimes bugged because the map = null
                            victim.getClient().disconnect(true, false);
                            player.getMap().removePlayer(victim);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {
                        break;
                    }
                }
            }
            if (player.gmLevel() < victim.gmLevel()) {
                victim = player;
            }
            victim.getClient().disconnect(false, false);
            break;
        case "cleardrops":
            player.getMap().clearDrops(player);
            player.dropMessage(5, "Cleared dropped items");
            break;
        case "clearslot":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !clearslot <all, equip, use, setup, etc or cash.>");
                break;
            }
            String type = sub[1];
            if (type.equals("all")) {
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.EQUIP, (byte) i, tempItem.getQuantity(), false, true);
                }
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (byte) i, tempItem.getQuantity(), false, true);
                }
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.ETC, (byte) i, tempItem.getQuantity(), false, true);
                }
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, (byte) i, tempItem.getQuantity(), false, true);
                }
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, (byte) i, tempItem.getQuantity(), false, true);
                }
                player.yellowMessage("All Slots Cleared.");
            } else if (type.equals("equip")) {
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.EQUIP, (byte) i, tempItem.getQuantity(), false, true);
                }
                player.yellowMessage("Equipment Slot Cleared.");
            } else if (type.equals("use")) {
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (byte) i, tempItem.getQuantity(), false, true);
                }
                player.yellowMessage("Use Slot Cleared.");
            } else if (type.equals("setup")) {
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, (byte) i, tempItem.getQuantity(), false, true);
                }
                player.yellowMessage("Set-Up Slot Cleared.");
            } else if (type.equals("etc")) {
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.ETC, (byte) i, tempItem.getQuantity(), false, true);
                }
                player.yellowMessage("ETC Slot Cleared.");
            } else if (type.equals("cash")) {
                for (int i = 0; i < 101; i++) {
                    Item tempItem = c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((byte) i);
                    if (tempItem == null)
                        continue;
                    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, (byte) i, tempItem.getQuantity(), false, true);
                }
                player.yellowMessage("Cash Slot Cleared.");
            } else
                player.yellowMessage("Slot" + type + " does not exist!");
            break;
        case "warp":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !warp <mapid>");
                break;
            }
            try {
                MapleMap target = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(sub[1]));
                if (target == null) {
                    player.yellowMessage("Map ID " + sub[1] + " is invalid.");
                    break;
                }
                if (player.getEventInstance() != null) {
                    player.getEventInstance().leftParty(player);
                }
                player.changeMap(target, target.getRandomPlayerSpawnpoint());
            } catch (Exception ex) {
                player.yellowMessage("Map ID " + sub[1] + " is invalid.");
                break;
            }
            break;
        case "warpto":
            if (sub.length < 3) {
                player.yellowMessage("Syntax: !warpto <playername> <mapid>");
                break;
            }
            victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
            if (victim == null) {
                // If victim isn't on current channel or isnt a character try and find him by loop all channels on current world.
                for (Channel ch : srv.getChannelsFromWorld(c.getWorld())) {
                    victim = ch.getPlayerStorage().getCharacterByName(sub[1]);
                    if (victim != null) {
                        // We found the person, no need to continue the loop.
                        break;
                    }
                }
            }
            if (victim != null) {
                // Remove warper from current event instance.
                if (player.getEventInstance() != null) {
                    player.getEventInstance().unregisterPlayer(player);
                }
                // Attempt to join the victims warp instance.
                if (victim.getEventInstance() != null) {
                    if (victim.getClient().getChannel() == player.getClient().getChannel()) {
                        // just in case.. you never know...
                        // victim.getEventInstance().registerPlayer(player);
                        player.changeMap(victim.getEventInstance().getMapInstance(victim.getMapId()), victim.getMap().findClosestPortal(victim.getPosition()));
                    } else {
                        player.dropMessage(6, "Please change to channel " + victim.getClient().getChannel());
                    }
                } else {
                    // If victim isn't in an event instance, just warp them.
                    player.changeMap(victim.getMapId(), victim.getMap().findClosestPortal(victim.getPosition()));
                }
                if (player.getClient().getChannel() != victim.getClient().getChannel()) {
                    // And then change channel if needed.
                    player.dropMessage("Changing channel, please wait a moment.");
                    player.getClient().changeChannel(victim.getClient().getChannel());
                }
            } else {
                player.dropMessage(6, "Unknown player.");
            }
            break;
        case "warphere":
        case "summon":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !warphere <playername>");
                break;
            }
            victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
            if (victim == null) {
                // If victim isn't on current channel, loop all channels on current world.
                for (Channel ch : srv.getChannelsFromWorld(c.getWorld())) {
                    victim = ch.getPlayerStorage().getCharacterByName(sub[1]);
                    if (victim != null) {
                        // We found the person, no need to continue the loop.
                        break;
                    }
                }
            }
            if (victim != null) {
                boolean changingEvent = true;
                if (victim.getEventInstance() != null) {
                    if (player.getEventInstance() != null && victim.getEventInstance().getLeaderId() == player.getEventInstance().getLeaderId()) {
                        changingEvent = false;
                    } else {
                        victim.getEventInstance().unregisterPlayer(victim);
                    }
                }
                // Attempt to join the warpers instance.
                if (player.getEventInstance() != null && changingEvent) {
                    if (player.getClient().getChannel() == victim.getClient().getChannel()) {
                        // just in case.. you never know...
                        player.getEventInstance().registerPlayer(victim);
                        victim.changeMap(player.getEventInstance().getMapInstance(player.getMapId()), player.getMap().findClosestPortal(player.getPosition()));
                    } else {
                        player.dropMessage("Target isn't on your channel, not able to warp into event instance.");
                    }
                } else {
                    // If victim isn't in an event instance or is in the same event instance as the one the caller is, just warp them.
                    victim.changeMap(player.getMapId(), player.getMap().findClosestPortal(player.getPosition()));
                }
                if (player.getClient().getChannel() != victim.getClient().getChannel()) {
                    // And then change channel if needed.
                    victim.dropMessage("Changing channel, please wait a moment.");
                    victim.getClient().changeChannel(player.getClient().getChannel());
                }
            } else {
                player.dropMessage(6, "Unknown player.");
            }
            break;
        case "reach":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !reach <playername>");
                break;
            }
            victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
            if (victim != null && victim.isLoggedin()) {
                if (player.getClient().getChannel() != victim.getClient().getChannel()) {
                    player.dropMessage(5, "Player '" + victim.getName() + "' is at channel " + victim.getClient().getChannel() + ".");
                } else {
                    MapleMap map = victim.getMap();
                    player.changeMap(map, map.findClosestPortal(victim.getPosition()));
                }
            } else {
                player.dropMessage(6, "Unknown player.");
            }
            break;
        case "gmshop":
            MapleShopFactory.getInstance().getShop(1337).sendShop(c);
            break;
        case "heal":
            player.setHpMp(30000);
            break;
        case "item":
        case "drop":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !item <itemid> <quantity>");
                break;
            }
            int itemId = Integer.parseInt(sub[1]);
            MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
            if (ii.getName(itemId) == null) {
                player.yellowMessage("Item id '" + sub[1] + "' does not exist.");
                break;
            }
            short quantity = 1;
            if (sub.length >= 3)
                quantity = Short.parseShort(sub[2]);
            if (ServerConstants.BLOCK_GENERATE_CASH_ITEM && ii.isCash(itemId)) {
                player.yellowMessage("You cannot create a cash item with this command.");
                break;
            }
            if (ItemConstants.isPet(itemId)) {
                if (sub.length >= 3) {
                    // thanks to istreety & TacoBell
                    quantity = 1;
                    long days = Math.max(1, Integer.parseInt(sub[2]));
                    long expiration = System.currentTimeMillis() + (days * 24 * 60 * 60 * 1000);
                    int petid = MaplePet.createPet(itemId);
                    if (sub[0].equals("item")) {
                        MapleInventoryManipulator.addById(c, itemId, quantity, player.getName(), petid, expiration);
                    } else {
                        Item toDrop = new Item(itemId, (short) 0, quantity, petid);
                        toDrop.setExpiration(expiration);
                        toDrop.setOwner("");
                        if (player.gmLevel() < 3) {
                            byte b = toDrop.getFlag();
                            b |= ItemConstants.ACCOUNT_SHARING;
                            b |= ItemConstants.UNTRADEABLE;
                            toDrop.setFlag(b);
                        }
                        c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
                    }
                    break;
                } else {
                    player.yellowMessage("Pet Syntax: !item <itemid> <expiration>");
                    break;
                }
            }
            if (sub[0].equals("item")) {
                byte flag = 0;
                if (player.gmLevel() < 3) {
                    flag |= ItemConstants.ACCOUNT_SHARING;
                    flag |= ItemConstants.UNTRADEABLE;
                }
                MapleInventoryManipulator.addById(c, itemId, quantity, player.getName(), -1, flag, -1);
            } else {
                Item toDrop;
                if (ItemConstants.getInventoryType(itemId) == MapleInventoryType.EQUIP) {
                    toDrop = ii.getEquipById(itemId);
                } else {
                    toDrop = new Item(itemId, (short) 0, quantity);
                }
                toDrop.setOwner(player.getName());
                if (player.gmLevel() < 3) {
                    byte b = toDrop.getFlag();
                    b |= ItemConstants.ACCOUNT_SHARING;
                    b |= ItemConstants.UNTRADEABLE;
                    toDrop.setFlag(b);
                }
                c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
            }
            break;
        case "level":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !level <newlevel>");
                break;
            }
            player.loseExp(player.getExp(), false, false);
            player.setLevel(Math.min(Integer.parseInt(sub[1]), player.getMaxClassLevel()) - 1);
            player.resetPlayerRates();
            if (ServerConstants.USE_ADD_RATES_BY_LEVEL == true)
                player.setPlayerRates();
            player.setWorldRates();
            player.levelUp(false);
            break;
        case "levelpro":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !levelpro <newlevel>");
                break;
            }
            while (player.getLevel() < Math.min(player.getMaxClassLevel(), Integer.parseInt(sub[1]))) {
                player.levelUp(false);
            }
            break;
        case "setstat":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !setstat <newstat>");
                break;
            }
            int x;
            try {
                x = Integer.parseInt(sub[1]);
                if (x > Short.MAX_VALUE)
                    x = Short.MAX_VALUE;
                else if (x < 0)
                    x = 0;
                player.setStr(x);
                player.setDex(x);
                player.setInt(x);
                player.setLuk(x);
                player.updateSingleStat(MapleStat.STR, x);
                player.updateSingleStat(MapleStat.DEX, x);
                player.updateSingleStat(MapleStat.INT, x);
                player.updateSingleStat(MapleStat.LUK, x);
            } catch (NumberFormatException nfe) {
            }
            break;
        case "maxstat":
            final String[] s = { "setstat", String.valueOf(Short.MAX_VALUE) };
            executeHeavenMsCommandLv2(cserv, srv, c, s);
            player.loseExp(player.getExp(), false, false);
            player.setLevel(255);
            player.resetPlayerRates();
            if (ServerConstants.USE_ADD_RATES_BY_LEVEL == true)
                player.setPlayerRates();
            player.setWorldRates();
            player.setFame(13337);
            player.setMaxHp(30000);
            player.setMaxMp(30000);
            player.updateSingleStat(MapleStat.LEVEL, 255);
            player.updateSingleStat(MapleStat.FAME, 13337);
            player.updateSingleStat(MapleStat.MAXHP, 30000);
            player.updateSingleStat(MapleStat.MAXMP, 30000);
            player.yellowMessage("Stats maxed out.");
            break;
        case "maxskill":
            for (MapleData skill_ : MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz")).getData("Skill.img").getChildren()) {
                try {
                    skill = SkillFactory.getSkill(Integer.parseInt(skill_.getName()));
                    player.changeSkillLevel(skill, (byte) skill.getMaxLevel(), skill.getMaxLevel(), -1);
                } catch (NumberFormatException nfe) {
                    nfe.printStackTrace();
                    break;
                } catch (NullPointerException npe) {
                    continue;
                }
            }
            if (player.getJob().isA(MapleJob.ARAN1) || player.getJob().isA(MapleJob.LEGEND)) {
                skill = SkillFactory.getSkill(5001005);
                player.changeSkillLevel(skill, (byte) -1, -1, -1);
            } else {
                skill = SkillFactory.getSkill(21001001);
                player.changeSkillLevel(skill, (byte) -1, -1, -1);
            }
            player.yellowMessage("Skills maxed out.");
            break;
        case "mesos":
            if (sub.length >= 2) {
                player.gainMeso(Integer.parseInt(sub[1]), true);
            }
            break;
        case "search":
            if (sub.length < 3) {
                player.yellowMessage("Syntax: !search <type> <name>");
                break;
            }
            StringBuilder sb = new StringBuilder();
            String search = joinStringFrom(sub, 2);
            // for the lulz
            long start = System.currentTimeMillis();
            MapleData data = null;
            MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File("wz/String.wz"));
            if (!sub[1].equalsIgnoreCase("ITEM")) {
                if (sub[1].equalsIgnoreCase("NPC")) {
                    data = dataProvider.getData("Npc.img");
                } else if (sub[1].equalsIgnoreCase("MOB") || sub[1].equalsIgnoreCase("MONSTER")) {
                    data = dataProvider.getData("Mob.img");
                } else if (sub[1].equalsIgnoreCase("SKILL")) {
                    data = dataProvider.getData("Skill.img");
                /*} else if (sub[1].equalsIgnoreCase("MAP")) {
                                        TODO
                                */
                } else {
                    sb.append("#bInvalid search.\r\nSyntax: '!search [type] [name]', where [type] is NPC, ITEM, MOB, or SKILL.");
                }
                if (data != null) {
                    String name;
                    for (MapleData searchData : data.getChildren()) {
                        name = MapleDataTool.getString(searchData.getChildByPath("name"), "NO-NAME");
                        if (name.toLowerCase().contains(search.toLowerCase())) {
                            sb.append("#b").append(Integer.parseInt(searchData.getName())).append("#k - #r").append(name).append("\r\n");
                        }
                    }
                }
            } else {
                for (Pair<Integer, String> itemPair : MapleItemInformationProvider.getInstance().getAllItems()) {
                    if (sb.length() < 32654) {
                        // ohlol
                        if (itemPair.getRight().toLowerCase().contains(search.toLowerCase())) {
                            // #v").append(id).append("# #k-
                            sb.append("#b").append(itemPair.getLeft()).append("#k - #r").append(itemPair.getRight()).append("\r\n");
                        }
                    } else {
                        sb.append("#bCouldn't load all items, there are too many results.\r\n");
                        break;
                    }
                }
            }
            if (sb.length() == 0) {
                sb.append("#bNo ").append(sub[1].toLowerCase()).append("s found.\r\n");
            }
            // because I can, and it's free
            sb.append("\r\n#kLoaded within ").append((double) (System.currentTimeMillis() - start) / 1000).append(" seconds.");
            c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, sb.toString(), "00 00", (byte) 0));
            break;
        case "jail":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
                break;
            }
            int minutesJailed = 5;
            if (sub.length >= 3) {
                minutesJailed = Integer.valueOf(sub[2]);
                if (minutesJailed <= 0) {
                    player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
                    break;
                }
            }
            victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
            if (victim != null) {
                victim.addJailExpirationTime(minutesJailed * 60 * 1000);
                int mapid = 300000012;
                if (victim.getMapId() != mapid) {
                    // those gone to jail won't be changing map anyway
                    MapleMap target = cserv.getMapFactory().getMap(mapid);
                    MaplePortal targetPortal = target.getPortal(0);
                    victim.changeMap(target, targetPortal);
                    player.message(victim.getName() + " was jailed for " + minutesJailed + " minutes.");
                } else {
                    player.message(victim.getName() + "'s time in jail has been extended for " + minutesJailed + " minutes.");
                }
            } else {
                player.message("Player '" + sub[1] + "' could not be found on this channel.");
            }
            break;
        case "unjail":
            if (sub.length < 2) {
                player.yellowMessage("Syntax: !unjail <playername>");
                break;
            }
            victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
            if (victim != null) {
                if (victim.getJailExpirationTimeLeft() <= 0) {
                    player.message("This player is already free.");
                    break;
                }
                victim.removeJailExpirationTime();
                victim.message("By lack of concrete proof you are now unjailed. Enjoy freedom!");
                player.message(victim.getName() + " was unjailed.");
            } else {
                player.message("Player '" + sub[1] + "' could not be found on this channel.");
            }
            break;
        case "job":
            if (sub.length == 2) {
                int jobid = Integer.parseInt(sub[1]);
                if (jobid < 0 || jobid >= 2200) {
                    player.message("Jobid " + jobid + " is not available.");
                    break;
                }
                player.changeJob(MapleJob.getById(jobid));
                player.equipChanged();
            } else if (sub.length == 3) {
                victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
                if (victim != null) {
                    int jobid = Integer.parseInt(sub[2]);
                    if (jobid < 0 || jobid >= 2200) {
                        player.message("Jobid " + jobid + " is not available.");
                        break;
                    }
                    victim.changeJob(MapleJob.getById(jobid));
                    player.equipChanged();
                } else {
                    player.message("Player '" + sub[1] + "' could not be found on this channel.");
                }
            } else {
                player.message("Syntax: !job <job id> <opt: IGN of another person>");
            }
            break;
        case "unbug":
            c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.enableActions());
            break;
        default:
            return false;
    }
    return true;
}
Also used : MapleCharacter(client.MapleCharacter) MapleData(provider.MapleData) Channel(net.server.channel.Channel) Point(java.awt.Point) SpawnPoint(server.life.SpawnPoint) SQLException(java.sql.SQLException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) MapleMapItem(server.maps.MapleMapItem) Item(client.inventory.Item) MapleMap(server.maps.MapleMap) Skill(client.Skill) MaplePortal(server.MaplePortal) MapleItemInformationProvider(server.MapleItemInformationProvider) MapleDataProvider(provider.MapleDataProvider) File(java.io.File)

Aggregations

File (java.io.File)4 MapleData (provider.MapleData)4 MapleDataProvider (provider.MapleDataProvider)4 ArrayList (java.util.ArrayList)3 Pair (tools.Pair)2 MapleCharacter (client.MapleCharacter)1 Skill (client.Skill)1 Item (client.inventory.Item)1 Point (java.awt.Point)1 IOException (java.io.IOException)1 UnknownHostException (java.net.UnknownHostException)1 SQLException (java.sql.SQLException)1 LinkedList (java.util.LinkedList)1 Channel (net.server.channel.Channel)1 MapleItemInformationProvider (server.MapleItemInformationProvider)1 MaplePortal (server.MaplePortal)1 SpawnPoint (server.life.SpawnPoint)1 MapleMap (server.maps.MapleMap)1 MapleMapItem (server.maps.MapleMapItem)1