예제 #1
0
  public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
    byte mode = slea.readByte();
    if (mode == 6) { // whisper
      String recipient = slea.readMapleAsciiString();
      String text = slea.readMapleAsciiString();

      if (!CommandProcessor.getInstance().processCommand(c, text)) {
        MapleCharacter player =
            c.getChannelServer().getPlayerStorage().getCharacterByName(recipient);
        if (player != null) {
          player
              .getClient()
              .getSession()
              .write(MaplePacketCreator.getWhisper(c.getPlayer().getName(), c.getChannel(), text));
          c.getSession().write(MaplePacketCreator.getWhisperReply(recipient, (byte) 1));
        } else { // not found
          try {
            if (ChannelServer.getInstance(c.getChannel())
                .getWorldInterface()
                .isConnected(recipient)) {
              ChannelServer.getInstance(c.getChannel())
                  .getWorldInterface()
                  .whisper(c.getPlayer().getName(), recipient, c.getChannel(), text);
              c.getSession().write(MaplePacketCreator.getWhisperReply(recipient, (byte) 1));
            } else {
              c.getSession().write(MaplePacketCreator.getWhisperReply(recipient, (byte) 0));
            }
          } catch (RemoteException e) {
            c.getSession().write(MaplePacketCreator.getWhisperReply(recipient, (byte) 0));
            c.getChannelServer().reconnectWorld();
          }
        }
      }
    } else if (mode == 5) { // - /find
      String recipient = slea.readMapleAsciiString();
      MapleCharacter player = c.getChannelServer().getPlayerStorage().getCharacterByName(recipient);
      if (player != null && (c.getPlayer().isGM() || !player.isHidden())) {
        if (player.inCS()) {
          c.getSession().write(MaplePacketCreator.getFindReplyWithCS(player.getName()));
        } else {
          c.getSession()
              .write(
                  MaplePacketCreator.getFindReplyWithMap(
                      player.getName(), player.getMap().getId()));
        }
      } else { // not found
        try {
          int channel =
              ChannelServer.getInstance(c.getChannel()).getWorldInterface().find(recipient);
          if (channel > -1) {
            c.getSession().write(MaplePacketCreator.getFindReply(recipient, channel));
          } else {
            c.getSession().write(MaplePacketCreator.getWhisperReply(recipient, (byte) 0));
          }
        } catch (RemoteException e) {
          c.getChannelServer().reconnectWorld();
        }
      }
    }
  }
예제 #2
0
  @Override
  public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
    int oid = slea.readInt();
    Point startPos = StreamUtil.readShortPoint(slea);
    List<LifeMovementFragment> res = parseMovement(slea);

    MapleCharacter player = c.getPlayer();
    Collection<MapleSummon> summons = player.getSummons().values();
    MapleSummon summon = null;
    for (MapleSummon sum : summons) {
      if (sum.getObjectId() == oid) {
        summon = sum;
      }
    }
    if (summon != null) {
      updatePosition(res, summon, 0);
      // player = ((MapleCharacter) c.getPlayer().getMap().getMapObject(30000));
      player
          .getMap()
          .broadcastMessage(
              player,
              MaplePacketCreator.moveSummon(player.getId(), oid, startPos, res),
              summon.getPosition());
    }
  }