void EffectDecayCorpse::unaffect (Zone* pZone , ZoneCoord_t x , ZoneCoord_t y , Object* pTarget) throw(Error) { __BEGIN_TRY // 올바른 좌표이어야 한다. Assert(isValidZoneCoord(pZone, x, y)); // 시체에 접근한다. if (pZone->getTile(x,y).hasItem()) { Item* pItem = pZone->getTile(x,y).getItem(); if (pItem != NULL) { // 타일위에 아이템이 있고 그 아이템의 오브젝트 아이디가 똑같아야만 똑 같은 시체이다. if (pItem->getObjectID() == m_ObjectID) { Corpse* pCorpse = dynamic_cast<Corpse*>(pTarget); try { // 시체를 존에서 삭제한다. Assert(pZone->getTile(x,y).getItem() == pCorpse); pZone->deleteItem(pCorpse , x, y); } catch (NoSuchElementException & nsee) { cerr << "EffectDecayCorpse::unaffect() : NoSuchElementException" << endl; throw Error(nsee.toString()); } GCDeleteObject gcDeleteObject; gcDeleteObject.setObjectID(pCorpse->getObjectID()); pZone->broadcastPacket(x, y , &gcDeleteObject); // 시체 자체를 삭제한다. SAFE_DELETE(pCorpse); } } } pTarget = NULL; __END_CATCH }