해당 분류 : 자바에 대한 이야기    아이템 분할에 대해서 알아보자.    글을 기록한 날 : 2012/06/13 01:25

아이템 분할은
gameserver/network/aion/clientpackets/CM_SPLIT_ITEM.java
위의 클래스를 호출하는 클라이언트 메세지를 받음으로써 발생한다.

  @Override
  protected void readImpl()
  {
    sourceItemObjId = readD(); // 기준이 되는 소스 아이템의 객체고유번호
    itemAmount = readD(); // 이동할 갯수
    @SuppressWarnings("unused")
    byte[] zeros = readB(4); // 0으로 이루어진 4바이트(아무것도 하는게 없다)
    sourceStorageType = readC(); // 분할을 시도한 기준 저장소(인벤토리,창고 등)
    destinationItemObjId = readD(); // 대상아이템의 객체 고유번호. 분할이 아닌 아이템을 합치는 요청이 있을때만 값이 들어온다.
    destinationStorageType = readC();// 대상 저장소.(인벤토리, 창고 등)
    slotNum = readH(); // 대상 슬롯. 어차피 남아있는 다음 슬롯을 사용해서 분할하기 때문에 당장은 필요하지 않다.
  }
위의 형태로 클라이언트로부터 추가 정보를 얻는다.

그렇다면 사용자가 이상행동을 하거나 분할의 문제점을 발견하여
분할을 취소하거나 다른 작업을 하기 위해서는 어떻게 해야 하는가?
그렇다면 아래와같이 실제 패킷을 처리하는 runImpl() 메소드에서 처리해주면 되겠다.
아래 예제는 9999개 이상의 아이템 분할을 시도했고, 해당 아이템이 키나가 아닌 경우에 한하여
시도한 아이템 분할 또는 병합을 취소하는 경우이다.
    if(itemAmount > 9999)
    {
      if(player.getStorage(sourceStorageType).getKinahItem().getObjectId() != sourceItemObjId)
      {
        log.warn("[AUDIT] 10,000개 이상의 아이템 분할 시도 : " + player.getName());
        Item item = player.getStorage(sourceStorageType).getItemByObjId(sourceItemObjId);
        if(sourceStorageType == StorageType.CUBE.getId())
          PacketSendUtility.sendPacket(player, new SM_INVENTORY_UPDATE(item, false));
        else
          PacketSendUtility.sendPacket(player, new SM_WAREHOUSE_UPDATE(item, sourceStorageType));
        PacketSendUtility.broadcastPacket(player, new SM_EMOTION(player, EmotionType.END_LOOT, 0, 0));
        return;
      }
    }
위의 소스를 보면 SM구문들이 많이 쓰였는데
클라이언트에서는 아이템을 분할했을때 창고나 특정 장소로 옮기면 클라이언트에서는
서버메세지를 기다리지 않고 이미 옮겨진 상태로 보이는 경우가 있다.
위의 SM구문들은 인벤토리인 경우 해당 인벤토리 전체를 새로고침 하거나
창고에서 옮긴 경우 해당 창고의 상태를 서버를 기준으로 재표시하기 위한 패킷들이다.
위의 구문들을 참고하면 충분히 분할에 대해서는 이해될꺼라 생각된다.
Creative Commons License
Creative Commons License

트랙백 주소 : http://www.barahime.org/trackback/14

  1. Subject : GS test demo

    Tracked from GS test demo / 2013/04/02 23:10  삭제

    아이온으로 풀어보는 자바이야기 :: 아이템 분할에 대해서 알아보자.

  2. Subject : garcinia cambogia review

    Tracked from garcinia cambogia review / 2014/07/09 06:00  삭제

    아이온으로 풀어보는 자바이야기 ::

  3. Subject : laser hair removal machines

    Tracked from laser hair removal machines / 2014/08/21 00:17  삭제

    아이온으로 풀어보는 자바이야기 :: 아이템 분할에 대해서 알아보자.

  4. Subject : apple cider vinegar weight loss

    Tracked from apple cider vinegar weight loss / 2014/10/12 08:30  삭제

    아이온으로 풀어보는 자바이야기 :: 아이템 분할에 대해서 알아보자.

Notice

Blogroll

Counter

· Total
: 274246
· Today
: 20
· Yesterday
: 36