public final void registerCarnivalParty(
      final MapleCharacter leader, final MapleMap map, final byte team) {
    leader.clearCarnivalRequests();
    List<MapleCharacter> characters = new LinkedList<MapleCharacter>();
    final MapleParty party = leader.getParty();

    if (party == null) {
      return;
    }
    for (MaplePartyCharacter pc : party.getMembers()) {
      final MapleCharacter c = map.getCharacterById_InMap(pc.getId());
      characters.add(c);
      registerPlayer(c);
      c.resetCP();
    }
    final MapleCarnivalParty carnivalParty = new MapleCarnivalParty(leader, characters, team);
    try {
      em.getIv().invokeFunction("registerCarnivalParty", this, carnivalParty);
    } catch (ScriptException ex) {
      ex.printStackTrace();
    } catch (NoSuchMethodException ex) {
      ex.printStackTrace();
    }
  }
  public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
    slea.readByte();
    slea.readInt(); // ?
    slea.readInt(); // position, but we dont need it o.o
    int oid = slea.readInt();
    MapleMapObject ob = c.getPlayer().getMap().getMapObject(oid);
    if (ob == null) {
      c.getSession().write(MaplePacketCreator.getInventoryFull());
      c.getSession().write(MaplePacketCreator.getShowInventoryFull());
      return;
    }
    if (ob instanceof MapleMapItem) {
      MapleMapItem mapitem = (MapleMapItem) ob;
      synchronized (mapitem) {
        if (mapitem.isPickedUp()) {
          c.getSession().write(MaplePacketCreator.getInventoryFull());
          c.getSession().write(MaplePacketCreator.getShowInventoryFull());
          return;
        }
        double distance = c.getPlayer().getPosition().distanceSq(mapitem.getPosition());
        c.getPlayer().getCheatTracker().checkPickupAgain();
        if (distance > 90000.0) { // 300^2, 550 is approximatly the range of ultis
          // AutobanManager.getInstance().addPoints(c, 100, 300000, "Itemvac");
          c.getPlayer().getCheatTracker().registerOffense(CheatingOffense.ITEMVAC);
          // Double.valueOf(Math.sqrt(distance))
        } else if (distance > 30000.0) {
          // log.warn("[h4x] Player {} is picking up an item that's fairly far away: {}",
          // c.getPlayer().getName(), Double.valueOf(Math.sqrt(distance)));
          c.getPlayer().getCheatTracker().registerOffense(CheatingOffense.SHORT_ITEMVAC);
        }

        if (mapitem.getMeso() > 0) {
          if (c.getPlayer().getParty() != null) {
            ChannelServer cserv = c.getChannelServer();
            int mesoAmm = mapitem.getMeso();
            int partyNum = 0;
            Collection<MaplePartyCharacter> partyMembers = c.getPlayer().getParty().getMembers();
            for (MaplePartyCharacter partyMember : partyMembers) {
              if (partyMember.getMapid() == c.getPlayer().getMapId()) {
                partyNum++;
              }
            }
            int mesoGain = mesoAmm / partyNum;
            for (MaplePartyCharacter partyMember : partyMembers) {
              if (partyMember.getMapid() == c.getPlayer().getMapId()) {
                cserv
                    .getPlayerStorage()
                    .getCharacterById(partyMember.getId())
                    .gainMeso(mesoGain, true, true);
              }
            }
          } else {
            c.getPlayer().gainMeso(mapitem.getMeso(), true, true);
          }
          c.getPlayer()
              .getMap()
              .broadcastMessage(
                  MaplePacketCreator.removeItemFromMap(
                      mapitem.getObjectId(), 2, c.getPlayer().getId()),
                  mapitem.getPosition());
          c.getPlayer().getCheatTracker().pickupComplete();
          c.getPlayer().getMap().removeMapObject(ob);
        } else {
          StringBuilder logInfo = new StringBuilder("Picked up by ");
          logInfo.append(c.getPlayer().getName());
          if (mapitem.getItem().getItemId() >= 5000000
              && mapitem.getItem().getItemId() <= 5000100) {
            int petId = MaplePet.createPet(mapitem.getItem().getItemId());
            if (petId == -1) {
              return;
            }
            MapleInventoryManipulator.addById(
                c,
                mapitem.getItem().getItemId(),
                mapitem.getItem().getQuantity(),
                "Cash Item was purchased.",
                null,
                petId);
            c.getPlayer()
                .getMap()
                .broadcastMessage(
                    MaplePacketCreator.removeItemFromMap(
                        mapitem.getObjectId(), 2, c.getPlayer().getId()),
                    mapitem.getPosition());
            c.getPlayer().getCheatTracker().pickupComplete();
            c.getPlayer().getMap().removeMapObject(ob);
          } else {
            if (MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), logInfo.toString())) {
              c.getPlayer()
                  .getMap()
                  .broadcastMessage(
                      MaplePacketCreator.removeItemFromMap(
                          mapitem.getObjectId(), 2, c.getPlayer().getId()),
                      mapitem.getPosition());
              c.getPlayer().getCheatTracker().pickupComplete();
              c.getPlayer().getMap().removeMapObject(ob);
            } else {
              c.getPlayer().getCheatTracker().pickupComplete();
              return;
            }
            if (mapitem.getItem().getItemId() == 1002357) {
              c.getPlayer().finishAchievement(13);
            }
          }
        }
        mapitem.setPickedUp(true);
      }
    }
    c.getSession().write(MaplePacketCreator.enableActions());
  }
 public void registerParty(MapleParty party, MapleMap map) {
   for (MaplePartyCharacter pc : party.getMembers()) {
     MapleCharacter c = map.getCharacterById_InMap(pc.getId());
     registerPlayer(c);
   }
 }