예제 #1
0
 public static final void FeedPot(final LittleEndianAccessor slea, final MapleClient c) {
   final int itemid = slea.readInt();
   final Item slot =
       c.getPlayer()
           .getInventory(GameConstants.getInventoryType(itemid))
           .getItem((short) slea.readInt());
   if (slot == null || slot.getQuantity() <= 0 || slot.getItemId() != itemid) {
     c.getSession().write(CWvsContext.enableActions());
     return;
   }
   final int level =
       GameConstants.getInventoryType(itemid) == MapleInventoryType.ETC
           ? MapleItemInformationProvider.getInstance().getItemMakeLevel(itemid)
           : MapleItemInformationProvider.getInstance().getReqLevel(itemid);
   if (level <= 0
       || level < (Math.min(120, c.getPlayer().getLevel()) - 50)
       || (GameConstants.getInventoryType(itemid) != MapleInventoryType.ETC
           && GameConstants.getInventoryType(itemid) != MapleInventoryType.EQUIP)) {
     c.getPlayer().dropMessage(1, "The item must be within 50 levels of you.");
     c.getSession().write(CWvsContext.enableActions());
     return;
   }
   final int index = slea.readInt() - 1;
   if (index < 0
       || index >= c.getPlayer().getImps().length
       || c.getPlayer().getImps()[index] == null
       || c.getPlayer().getImps()[index].getLevel()
           >= (MapleItemInformationProvider.getInstance()
                   .getPot(c.getPlayer().getImps()[index].getItemId())
                   .right
               - 1)
       || c.getPlayer().getImps()[index].getState() != 1) {
     c.getSession().write(CWvsContext.enableActions());
     return;
   }
   int mask = ImpFlag.FULLNESS.getValue();
   mask |= ImpFlag.FULLNESS_2.getValue();
   mask |= ImpFlag.UPDATE_TIME.getValue();
   mask |= ImpFlag.AWAKE_TIME.getValue();
   // this is where the magic happens
   c.getPlayer()
       .getImps()[index]
       .setFullness(
           c.getPlayer().getImps()[index].getFullness()
               + (100
                   * (GameConstants.getInventoryType(itemid) == MapleInventoryType.EQUIP
                       ? 2
                       : 1)));
   if (Randomizer.nextBoolean()) {
     mask |= ImpFlag.CLOSENESS.getValue();
     c.getPlayer()
         .getImps()[index]
         .setCloseness(
             c.getPlayer().getImps()[index].getCloseness()
                 + 1
                 + (Randomizer.nextInt(
                     5
                         * (GameConstants.getInventoryType(itemid) == MapleInventoryType.EQUIP
                             ? 2
                             : 1))));
   } else if (Randomizer.nextInt(5) == 0) { // 1/10 chance of sickness
     c.getPlayer().getImps()[index].setState(4); // sick
     mask |= ImpFlag.STATE.getValue();
   }
   if (c.getPlayer().getImps()[index].getFullness() >= 1000) {
     c.getPlayer().getImps()[index].setState(1);
     c.getPlayer().getImps()[index].setFullness(0);
     c.getPlayer().getImps()[index].setLevel(c.getPlayer().getImps()[index].getLevel() + 1);
     mask |= ImpFlag.SUMMONED.getValue();
     if (c.getPlayer().getImps()[index].getLevel()
         >= (MapleItemInformationProvider.getInstance()
                 .getPot(c.getPlayer().getImps()[index].getItemId())
                 .right
             - 1)) {
       c.getPlayer().getImps()[index].setState(5);
     }
   }
   MapleInventoryManipulator.removeFromSlot(
       c, GameConstants.getInventoryType(itemid), slot.getPosition(), (short) 1, false, false);
   c.getSession().write(CWvsContext.updateImp(c.getPlayer().getImps()[index], mask, index, false));
 }
예제 #2
0
 private static void addEnchantStats(final Map<String, Integer> stats, final Equip item) {
   Integer s = stats.get("PAD");
   if (s != null && s != 0) {
     item.setWatk((short) (item.getWatk() + s));
   }
   s = stats.get("MAD");
   if (s != null && s != 0) {
     item.setMatk((short) (item.getMatk() + s));
   }
   s = stats.get("ACC");
   if (s != null && s != 0) {
     item.setAcc((short) (item.getAcc() + s));
   }
   s = stats.get("EVA");
   if (s != null && s != 0) {
     item.setAvoid((short) (item.getAvoid() + s));
   }
   s = stats.get("Speed");
   if (s != null && s != 0) {
     item.setSpeed((short) (item.getSpeed() + s));
   }
   s = stats.get("Jump");
   if (s != null && s != 0) {
     item.setJump((short) (item.getJump() + s));
   }
   s = stats.get("MaxHP");
   if (s != null && s != 0) {
     item.setHp((short) (item.getHp() + s));
   }
   s = stats.get("MaxMP");
   if (s != null && s != 0) {
     item.setMp((short) (item.getMp() + s));
   }
   s = stats.get("STR");
   if (s != null && s != 0) {
     item.setStr((short) (item.getStr() + s));
   }
   s = stats.get("DEX");
   if (s != null && s != 0) {
     item.setDex((short) (item.getDex() + s));
   }
   s = stats.get("INT");
   if (s != null && s != 0) {
     item.setInt((short) (item.getInt() + s));
   }
   s = stats.get("LUK");
   if (s != null && s != 0) {
     item.setLuk((short) (item.getLuk() + s));
   }
   s = stats.get("randOption");
   if (s != null && s != 0) {
     final int ma = item.getMatk(), wa = item.getWatk();
     if (wa > 0) {
       item.setWatk((short) (Randomizer.nextBoolean() ? (wa + s) : (wa - s)));
     }
     if (ma > 0) {
       item.setMatk((short) (Randomizer.nextBoolean() ? (ma + s) : (ma - s)));
     }
   }
   s = stats.get("randStat");
   if (s != null && s != 0) {
     final int str = item.getStr(), dex = item.getDex(), luk = item.getLuk(), int_ = item.getInt();
     if (str > 0) {
       item.setStr((short) (Randomizer.nextBoolean() ? (str + s) : (str - s)));
     }
     if (dex > 0) {
       item.setDex((short) (Randomizer.nextBoolean() ? (dex + s) : (dex - s)));
     }
     if (int_ > 0) {
       item.setInt((short) (Randomizer.nextBoolean() ? (int_ + s) : (int_ - s)));
     }
     if (luk > 0) {
       item.setLuk((short) (Randomizer.nextBoolean() ? (luk + s) : (luk - s)));
     }
   }
 }