void CGRequestRepairHandler::execute (CGRequestRepair* pPacket , Player* pPlayer) throw(ProtocolException , Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); ObjectID_t ITEMOID = pPacket->getObjectID(); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pPC = pGamePlayer->getCreature(); bool bSlayer = false; bool bVampire = false; bool bOusters = false; Item* pItem = NULL; // 플레이어가 슬레이어인지 뱀파이어인지 구분. if (pPC->isSlayer()) bSlayer = true; else if (pPC->isVampire()) bVampire = true; else if (pPC->isOusters()) bOusters = true; else throw ProtocolException("CGRequestRepairHandler::execute() : Unknown player creature!"); if (ITEMOID == 0) { // ObjectID가 0이라면 모든 아이템을 수리하고자 하는 것이다. executeAll(pPacket, pPlayer); } else { if (bSlayer) pItem = (dynamic_cast<Slayer*>(pPC))->findItemOID(ITEMOID); else if (bVampire) pItem = (dynamic_cast<Vampire*>(pPC))->findItemOID(ITEMOID); else if (bOusters) pItem = (dynamic_cast<Ousters*>(pPC))->findItemOID(ITEMOID); // 플레이어가 아이템을 가지고 있다면 if (pItem != NULL) { // 그 아이템이 모터 사이클 키라면... if (pItem->getItemClass() == Item::ITEM_CLASS_KEY && pItem->getItemType() == 2) { executeMotorcycle(pPacket, pPlayer); return; } else executeNormal(pPacket, pPlayer); } else { // 아이템이 없으니, 당연히 수리할 수 없다. GCNPCResponse response; response.setCode(NPC_RESPONSE_REPAIR_FAIL_ITEM_NOT_EXIST); pPlayer->sendPacket(&response); } } #endif __END_DEBUG_EX __END_CATCH }
////////////////////////////////////////////////////////////////////////////// // 플레이어가 팔려고 하는 아이템을 가지고 있는지 확인한 다음에, // 일반 아이템과 모터 사이클 처리 부분으로 분기한다. ////////////////////////////////////////////////////////////////////////////// void CGShopRequestSellHandler::execute (CGShopRequestSell* pPacket , Player* pPlayer) throw(ProtocolException , Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); ObjectID_t ITEMOID = pPacket->getItemObjectID(); BYTE OPCODE = pPacket->getOpCode(); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); if (OPCODE == SHOP_REQUEST_SELL_NORMAL) { // 플레이어가 팔려고 하는 아이템을 가지고 있는지 검사 Inventory* pInventory = pPC->getInventory(); if (pInventory->hasItem(ITEMOID) == false) throw ProtocolException("CGShopRequestSellHandler::execute() : No such item to sell!"); Item* pItem = pInventory->getItemWithObjectID(ITEMOID); if (pItem == NULL || pPC->getStore()->hasItem(pItem)) return sendFailPacket(pPacket, pPlayer); //ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo(pItem->getItemClass(), pItem->getItemType()); //Assert(pItemInfo!=NULL); // 유니크 아이템은 못판다. // 특정 아이템 클래스는 팔 수 없다. by sigi. 2002.8.29 // 선물 상자는 팔 수 있다. by bezz. 2002.12.13 // 커플링은 팔 수 없다. by Sequoia. 2003. 3. 3 // ItemUtil 안에 canSell 로 Extract 2003. 3. 3 if (!canSell(pItem)) return sendFailPacket(pPacket, pPlayer); else if (pItem->getItemClass() == Item::ITEM_CLASS_KEY && pItem->getItemType() == 2) executeMotorcycle(pPacket, pPlayer); else executeNormal(pPacket, pPlayer); } else if (OPCODE == SHOP_REQUEST_SELL_ALL_SKULL) executeOpAllSkull(pPacket, pPlayer); else if (OPCODE == SHOP_REQUEST_SWAP_ADVANCEMENT_ITEM) executeOpSwapAdvancementItem(pPacket, pPlayer); else throw ProtocolException("CGShopRequestSellHandler::execute() : unknown op code"); #endif __END_DEBUG_EX __END_CATCH }