// 상점 거래를 종료 void CShopManager::StopShopping(LPCHARACTER ch) { LPSHOP shop; if (!(shop = ch->GetShop())) return; //PREVENT_ITEM_COPY; ch->SetMyShopTime(); //END_PREVENT_ITEM_COPY shop->RemoveGuest(ch); sys_log(0, "SHOP: END: %s", ch->GetName()); }
// 아이템 구입 void CShopManager::Buy(LPCHARACTER ch, BYTE pos) { if (!ch->GetShop()) return; if (!ch->GetShopOwner()) return; if (DISTANCE_APPROX(ch->GetX() - ch->GetShopOwner()->GetX(), ch->GetY() - ch->GetShopOwner()->GetY()) > 2000) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상점과의 거리가 너무 멀어 물건을 살 수 없습니다.")); return; } CShop* pkShop = ch->GetShop(); if (!pkShop->IsPCShop()) { //if (pkShop->GetVnum() == 0) // return; //const CMob* pkMob = CMobManager::instance().Get(pkShop->GetNPCVnum()); //if (!pkMob) // return; //if (pkMob->m_table.bType != CHAR_TYPE_NPC) //{ // return; //} } else { } //PREVENT_ITEM_COPY ch->SetMyShopTime(); //END_PREVENT_ITEM_COPY int ret = pkShop->Buy(ch, pos); if (SHOP_SUBHEADER_GC_OK != ret) // 문제가 있었으면 보낸다. { TPacketGCShop pack; pack.header = HEADER_GC_SHOP; pack.subheader = ret; pack.size = sizeof(TPacketGCShop); ch->GetDesc()->Packet(&pack, sizeof(pack)); } }
void CShopManager::DestroyPCShop(LPCHARACTER ch) { LPSHOP pkShop = FindPCShop(ch->GetVID()); if (!pkShop) return; //PREVENT_ITEM_COPY; ch->SetMyShopTime(); //END_PREVENT_ITEM_COPY m_map_pkShopByPC.erase(ch->GetVID()); M2_DELETE(pkShop); }