Search in sources :

Example 1 with Gachapon

use of server.gachapon.MapleGachapon.Gachapon in project HeavenMS by ronancpl.

the class Commands method executeHeavenMsCommandLv0.

public static boolean executeHeavenMsCommandLv0(Channel cserv, Server srv, MapleClient c, String[] sub) {
    // Player
    MapleCharacter player = c.getPlayer();
    switch(sub[0]) {
        case "help":
        case "commands":
        case "playercommands":
            c.getAbstractPlayerInteraction().openNpc(9201143, "commands");
            break;
        case "droplimit":
            int dropCount = c.getPlayer().getMap().getDroppedItemCount();
            if (((float) dropCount) / ServerConstants.ITEM_LIMIT_ON_MAP < 0.75f) {
                c.getPlayer().showHint("Current drop count: #b" + dropCount + "#k / #e" + ServerConstants.ITEM_LIMIT_ON_MAP + "#n", 300);
            } else {
                c.getPlayer().showHint("Current drop count: #r" + dropCount + "#k / #e" + ServerConstants.ITEM_LIMIT_ON_MAP + "#n", 300);
            }
            break;
        case "time":
            DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
            dateFormat.setTimeZone(TimeZone.getTimeZone(ServerConstants.TIMEZONE));
            player.yellowMessage("Solaxia Server Time: " + dateFormat.format(new Date()));
            break;
        case "credits":
        case "staff":
            c.getAbstractPlayerInteraction().openNpc(2010007, "credits");
            break;
        case "lastrestart":
        case "uptime":
            long milliseconds = System.currentTimeMillis() - Server.uptime;
            int seconds = (int) (milliseconds / 1000) % 60;
            int minutes = (int) ((milliseconds / (1000 * 60)) % 60);
            int hours = (int) ((milliseconds / (1000 * 60 * 60)) % 24);
            int days = (int) ((milliseconds / (1000 * 60 * 60 * 24)));
            player.yellowMessage("Server has been online for " + days + " days " + hours + " hours " + minutes + " minutes and " + seconds + " seconds.");
            break;
        case "gacha":
            Gachapon gacha = null;
            String search = joinStringFrom(sub, 1);
            String gachaName = "";
            String[] names = { "Henesys", "Ellinia", "Perion", "Kerning City", "Sleepywood", "Mushroom Shrine", "Showa Spa Male", "Showa Spa Female", "New Leaf City", "Nautilus Harbor" };
            int[] ids = { 9100100, 9100101, 9100102, 9100103, 9100104, 9100105, 9100106, 9100107, 9100109, 9100117 };
            for (int i = 0; i < names.length; i++) {
                if (search.equalsIgnoreCase(names[i])) {
                    gachaName = names[i];
                    gacha = Gachapon.getByNpcId(ids[i]);
                }
            }
            if (gacha == null) {
                player.yellowMessage("Please use @gacha <name> where name corresponds to one of the below:");
                for (String name : names) {
                    player.yellowMessage(name);
                }
                break;
            }
            String output = "The #b" + gachaName + "#k Gachapon contains the following items.\r\n\r\n";
            for (int i = 0; i < 2; i++) {
                for (int id : gacha.getItems(i)) {
                    output += "-" + MapleItemInformationProvider.getInstance().getName(id) + "\r\n";
                }
            }
            output += "\r\nPlease keep in mind that there are items that are in all gachapons and are not listed here.";
            c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, output, "00 00", (byte) 0));
            break;
        case "whatdropsfrom":
            if (sub.length < 2) {
                player.dropMessage(5, "Please do @whatdropsfrom <monster name>");
                break;
            }
            String monsterName = joinStringFrom(sub, 1);
            output = "";
            int limit = 3;
            Iterator<Pair<Integer, String>> listIterator = MapleMonsterInformationProvider.getMobsIDsFromName(monsterName).iterator();
            for (int i = 0; i < limit; i++) {
                if (listIterator.hasNext()) {
                    Pair<Integer, String> data = listIterator.next();
                    int mobId = data.getLeft();
                    String mobName = data.getRight();
                    output += mobName + " drops the following items:\r\n\r\n";
                    for (MonsterDropEntry drop : MapleMonsterInformationProvider.getInstance().retrieveDrop(mobId)) {
                        try {
                            String name = MapleItemInformationProvider.getInstance().getName(drop.itemId);
                            if (name.equals("null") || drop.chance == 0) {
                                continue;
                            }
                            float chance = 1000000 / drop.chance / player.getDropRate();
                            output += "- " + name + " (1/" + (int) chance + ")\r\n";
                        } catch (Exception ex) {
                            ex.printStackTrace();
                            continue;
                        }
                    }
                    output += "\r\n";
                }
            }
            c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, output, "00 00", (byte) 0));
            break;
        case "whodrops":
            if (sub.length < 2) {
                player.dropMessage(5, "Please do @whodrops <item name>");
                break;
            }
            String searchString = joinStringFrom(sub, 1);
            output = "";
            listIterator = MapleItemInformationProvider.getInstance().getItemDataByName(searchString).iterator();
            if (listIterator.hasNext()) {
                int count = 1;
                while (listIterator.hasNext() && count <= 3) {
                    Pair<Integer, String> data = listIterator.next();
                    output += "#b" + data.getRight() + "#k is dropped by:\r\n";
                    try {
                        Connection con = DatabaseConnection.getConnection();
                        PreparedStatement ps = con.prepareStatement("SELECT dropperid FROM drop_data WHERE itemid = ? LIMIT 50");
                        ps.setInt(1, data.getLeft());
                        ResultSet rs = ps.executeQuery();
                        while (rs.next()) {
                            String resultName = MapleMonsterInformationProvider.getMobNameFromID(rs.getInt("dropperid"));
                            if (resultName != null) {
                                output += resultName + ", ";
                            }
                        }
                        rs.close();
                        ps.close();
                        con.close();
                    } catch (Exception e) {
                        player.dropMessage(6, "There was a problem retrieving the required data. Please try again.");
                        e.printStackTrace();
                        break;
                    }
                    output += "\r\n\r\n";
                    count++;
                }
            } else {
                player.dropMessage(5, "The item you searched for doesn't exist.");
                break;
            }
            c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, output, "00 00", (byte) 0));
            break;
        case "dispose":
            NPCScriptManager.getInstance().dispose(c);
            c.announce(MaplePacketCreator.enableActions());
            c.removeClickedNPC();
            player.message("You've been disposed.");
            break;
        case "equiplv":
            player.showAllEquipFeatures();
            break;
        case "showrates":
            String showMsg = "#eEXP RATE#n" + "\r\n";
            showMsg += "Server EXP Rate: #k" + c.getWorldServer().getExpRate() + "x#k" + "\r\n";
            showMsg += "Player EXP Rate: #k" + player.getRawExpRate() + "x#k" + "\r\n";
            if (player.getCouponExpRate() != 1)
                showMsg += "Coupon EXP Rate: #k" + player.getCouponExpRate() + "x#k" + "\r\n";
            showMsg += "EXP Rate: #e#b" + player.getExpRate() + "x#k#n" + "\r\n";
            showMsg += "\r\n" + "#eMESO RATE#n" + "\r\n";
            showMsg += "Server MESO Rate: #k" + c.getWorldServer().getMesoRate() + "x#k" + "\r\n";
            showMsg += "Player MESO Rate: #k" + player.getRawMesoRate() + "x#k" + "\r\n";
            if (player.getCouponMesoRate() != 1)
                showMsg += "Coupon MESO Rate: #k" + player.getCouponMesoRate() + "x#k" + "\r\n";
            showMsg += "MESO Rate: #e#b" + player.getMesoRate() + "x#k#n" + "\r\n";
            showMsg += "\r\n" + "#eDROP RATE#n" + "\r\n";
            showMsg += "Server DROP Rate: #k" + c.getWorldServer().getDropRate() + "x#k" + "\r\n";
            showMsg += "Player DROP Rate: #k" + player.getRawDropRate() + "x#k" + "\r\n";
            if (player.getCouponDropRate() != 1)
                showMsg += "Coupon DROP Rate: #k" + player.getCouponDropRate() + "x#k" + "\r\n";
            showMsg += "DROP Rate: #e#b" + player.getDropRate() + "x#k#n" + "\r\n";
            if (ServerConstants.USE_QUEST_RATE) {
                showMsg += "\r\n" + "#eQUEST RATE#n" + "\r\n";
                showMsg += "Server QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n";
            }
            player.showHint(showMsg, 300);
            break;
        case "rates":
            String showMsg_ = "#eCHARACTER RATES#n" + "\r\n\r\n";
            showMsg_ += "EXP Rate: #e#b" + player.getExpRate() + "x#k#n" + "\r\n";
            showMsg_ += "MESO Rate: #e#b" + player.getMesoRate() + "x#k#n" + "\r\n";
            showMsg_ += "DROP Rate: #e#b" + player.getDropRate() + "x#k#n" + "\r\n";
            if (ServerConstants.USE_QUEST_RATE)
                showMsg_ += "QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n";
            player.showHint(showMsg_, 300);
            break;
        case "online":
            for (Channel ch : Server.getInstance().getChannelsFromWorld(player.getWorld())) {
                player.yellowMessage("Players in Channel " + ch.getId() + ":");
                for (MapleCharacter chr : ch.getPlayerStorage().getAllCharacters()) {
                    if (!chr.isGM()) {
                        player.message(" >> " + MapleCharacter.makeMapleReadable(chr.getName()) + " is at " + chr.getMap().getMapName() + ".");
                    }
                }
            }
            break;
        case "gm":
            if (sub.length < 3) {
                // #goodbye 'hi'
                player.dropMessage(5, "Your message was too short. Please provide as much detail as possible.");
                break;
            }
            String message = joinStringFrom(sub, 1);
            Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[GM MESSAGE]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
            Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
            FilePrinter.printError("gm.txt", MapleCharacter.makeMapleReadable(player.getName()) + ": " + message + "\r\n");
            player.dropMessage(5, "Your message '" + message + "' was sent to GMs.");
            player.dropMessage(5, tips[Randomizer.nextInt(tips.length)]);
            break;
        case "bug":
            if (sub.length < 2) {
                player.dropMessage(5, "Message too short and not sent. Please do @bug <bug>");
                break;
            }
            message = joinStringFrom(sub, 1);
            Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[BUG]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
            Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
            FilePrinter.printError("bug.txt", MapleCharacter.makeMapleReadable(player.getName()) + ": " + message + "\r\n");
            player.dropMessage(5, "Your bug '" + message + "' was submitted successfully to our developers. Thank you!");
            break;
        /*
                case "points":
			player.dropMessage(5, "You have " + c.getVotePoints() + " vote point(s).");
			if (c.hasVotedAlready()) {
				Date currentDate = new Date();
				int time = (int) ((int) 86400 - ((currentDate.getTime() / 1000) - c.getVoteTime())); //ugly as fuck
				hours = time / 3600;
				minutes = time % 3600 / 60;
				seconds = time % 3600 % 60;
				player.yellowMessage("You have already voted. You can vote again in " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds.");
			} else {
				player.yellowMessage("You are free to vote! Make sure to vote to gain a vote point!");
			}
			break;
                */
        case "joinevent":
            if (!FieldLimit.CANNOTMIGRATE.check(player.getMap().getFieldLimit())) {
                MapleEvent event = c.getChannelServer().getEvent();
                if (event != null) {
                    if (event.getMapId() != player.getMapId()) {
                        if (event.getLimit() > 0) {
                            player.saveLocation("EVENT");
                            if (event.getMapId() == 109080000 || event.getMapId() == 109060001)
                                player.setTeam(event.getLimit() % 2);
                            event.minusLimit();
                            player.changeMap(event.getMapId());
                        } else {
                            player.dropMessage(5, "The limit of players for the event has already been reached.");
                        }
                    } else {
                        player.dropMessage(5, "You are already in the event.");
                    }
                } else {
                    player.dropMessage(5, "There is currently no event in progress.");
                }
            } else {
                player.dropMessage(5, "You are currently in a map where you can't join an event.");
            }
            break;
        case "leaveevent":
            int returnMap = player.getSavedLocation("EVENT");
            if (returnMap != -1) {
                if (player.getOla() != null) {
                    player.getOla().resetTimes();
                    player.setOla(null);
                }
                if (player.getFitness() != null) {
                    player.getFitness().resetTimes();
                    player.setFitness(null);
                }
                player.changeMap(returnMap);
                if (c.getChannelServer().getEvent() != null) {
                    c.getChannelServer().getEvent().addLimit();
                }
            } else {
                player.dropMessage(5, "You are not currently in an event.");
            }
            break;
        case "bosshp":
            for (MapleMonster monster : player.getMap().getMonsters()) {
                if (monster != null && monster.isBoss() && monster.getHp() > 0) {
                    long percent = monster.getHp() * 100L / monster.getMaxHp();
                    String bar = "[";
                    for (int i = 0; i < 100; i++) {
                        bar += i < percent ? "|" : ".";
                    }
                    bar += "]";
                    player.yellowMessage(monster.getName() + " (" + monster.getId() + ") has " + percent + "% HP left.");
                    player.yellowMessage("HP: " + bar);
                }
            }
            break;
        case "ranks":
            PreparedStatement ps = null;
            ResultSet rs = null;
            Connection con = null;
            try {
                con = DatabaseConnection.getConnection();
                ps = con.prepareStatement("SELECT `characters`.`name`, `characters`.`level` FROM `characters` LEFT JOIN accounts ON accounts.id = characters.accountid WHERE `characters`.`gm` = '0' AND `accounts`.`banned` = '0' ORDER BY level DESC, exp DESC LIMIT 50");
                rs = ps.executeQuery();
                player.announce(MaplePacketCreator.showPlayerRanks(9010000, rs));
                ps.close();
                rs.close();
                con.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (ps != null && !ps.isClosed()) {
                        ps.close();
                    }
                    if (rs != null && !rs.isClosed()) {
                        rs.close();
                    }
                    if (con != null && !con.isClosed()) {
                        con.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            break;
        default:
            return false;
    }
    return true;
}
Also used : MapleCharacter(client.MapleCharacter) MapleEvent(server.events.gm.MapleEvent) SQLException(java.sql.SQLException) Channel(net.server.channel.Channel) Connection(java.sql.Connection) DatabaseConnection(tools.DatabaseConnection) Gachapon(server.gachapon.MapleGachapon.Gachapon) PreparedStatement(java.sql.PreparedStatement) Point(java.awt.Point) SpawnPoint(server.life.SpawnPoint) Date(java.util.Date) SQLException(java.sql.SQLException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) MonsterDropEntry(server.life.MonsterDropEntry) DateFormat(java.text.DateFormat) SimpleDateFormat(java.text.SimpleDateFormat) ResultSet(java.sql.ResultSet) SimpleDateFormat(java.text.SimpleDateFormat) MapleMonster(server.life.MapleMonster) Pair(tools.Pair)

Aggregations

MapleCharacter (client.MapleCharacter)1 Point (java.awt.Point)1 IOException (java.io.IOException)1 UnknownHostException (java.net.UnknownHostException)1 Connection (java.sql.Connection)1 PreparedStatement (java.sql.PreparedStatement)1 ResultSet (java.sql.ResultSet)1 SQLException (java.sql.SQLException)1 DateFormat (java.text.DateFormat)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Date (java.util.Date)1 Channel (net.server.channel.Channel)1 MapleEvent (server.events.gm.MapleEvent)1 Gachapon (server.gachapon.MapleGachapon.Gachapon)1 MapleMonster (server.life.MapleMonster)1 MonsterDropEntry (server.life.MonsterDropEntry)1 SpawnPoint (server.life.SpawnPoint)1 DatabaseConnection (tools.DatabaseConnection)1 Pair (tools.Pair)1