#include "stdafx.h" #ifndef _NA_0_20110613_GAME_SHOP_RENEWAL #include ".\packageitem.h" #include ".\ShopManager.h" #include #include #include __IMPL_CUSTOMPOOL_PTR(PackageItem); //================================================================================================== PackageItem::PackageItem() { ZeroMemory(&package_item_data_, sizeof(package_item_data_)); } PackageItem::~PackageItem() { } void PackageItem::Release() { ShopItem::Release(); ZeroMemory(&package_item_data_, sizeof(package_item_data_)); ZeroMemory(item_pieces_, sizeof(item_pieces_)); } #ifdef _NA_0_20101015_SOLAR_SHOP_TEMP_REFACTORING void PackageItem::Set(const tblSellItemContainer& container, ShopManager& mgr) { Set(*(container.packageitem_info), mgr); ShopItemData* const shop_item_data = GetEditableShopItemData(); shop_item_data->partition_index_ = static_cast(container.partition_index); shop_item_data->item_filter_ = container.shopitem_filter; shop_item_data->category_ = static_cast(container.category_index); shop_item_data->cache_index_ = static_cast(container.cache_index); } #endif //void PackageItem::Set(BYTE* pInfo IN, ShopManager& mgr IN) void PackageItem::Set(const tblSellPackage& rPack, ShopManager& mgr) { ASSERT(SAFE_NUMERIC_TYPECAST(DWORD,rPack.itemPrice.dwSellRate,BYTE)); ASSERT(SAFE_NUMERIC_TYPECAST(DWORD,rPack.dwCategory,BYTE)); ASSERT(SAFE_NUMERIC_TYPECAST(DWORD,rPack.dwBuyType,BYTE)); assert(!GetShopItemPrice()); ShopItemData* const shop_item_data = GetEditableShopItemData(); shop_item_data->item_guid_ = rPack.dwPackageGuid; package_item_data_.image_code_ = rPack.dwImageCode; package_item_data_.shop_item_price_ = mgr.CreateShopItemPrice(); // f100905.3L ShopItemPrice* const shop_item_price = GetShopItemPrice(); shop_item_price->AlignFromShopSellPackage(rPack, this); const PRICEGUID price_guid = shop_item_price->GetPriceGuid(); // ÀÌ°Ç tblSellItem Á¤º¸¿¡ Æ÷ÇԵǾîÀÖÁö ¾Ê±â¶§¹®¿¡ Á÷Á¢ mgr¿¡ ³Ö¾îÁà¾ß ÇÑ´Ù. // Á¦¹ßÀÌ·±±¸Á¶·Î ¸¸µéÁö¸»ÀÚ..Á»!!..Á» ÀßÇØÁÙ·¡??¿ïÈ­ÅëÀÌÅÍÁö°Ú³ß..Á¤¸».¿Àxx // f100905.3L, ... -.- The pot calls the kettle black. if (ShopItemPrice* integrity_check_desire_empty_in_table = mgr.FindShopItemPrice(price_guid)) { ASSERT(integrity_check_desire_empty_in_table != NULL); SUNLOG(eCRITICAL_LOG, _T("[PackageItem::Set] Error!! PriceGuid is Exist, Guid = %u, ExistItemName = %s"), price_guid, integrity_check_desire_empty_in_table->GetShopItem()->GetName()); } mgr.AddShopItemPrice(shop_item_price); shop_item_data->category_ = static_cast(rPack.dwCategory); shop_item_data->money_type_ = static_cast(rPack.dwBuyType); //shop_item_data->cool_time_ = rPack.dwCoolTime; shop_item_data->limit_sell_count_ = rPack.dwLimitSellCount; ;{ SYSTEMTIME systime; ::VariantTimeToSystemTime(rPack.dbVarEndDate, &systime); util::GetDateTime_YYYYMMDDHHMMSS(systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wSecond, shop_item_data->sell_expiration_date_); }; shop_item_data->state_ = rPack.dwState; ASSERT(sizeof(package_name_) == sizeof(rPack.szPackageName)+1); ASSERT(sizeof(package_desc_) == sizeof(rPack.szPackageDesc)+1); strncpy(package_name_, rPack.szPackageName, MAX_PACKAGE_NAME_LENGTH); package_name_[MAX_PACKAGE_NAME_LENGTH] ='\0'; strncpy(package_desc_, rPack.szPackageDesc, MAX_PACKAGE_DESC_LENGTH); package_desc_[MAX_PACKAGE_DESC_LENGTH] ='\0'; DWORD number_of_items = rPack.dwInItemCount; if (FlowControl::FCAssert(number_of_items <= MAX_PACKAGE_ITEM_SIZE) == false) { number_of_items = MAX_PACKAGE_ITEM_SIZE; } package_item_data_.number_of_item_pieces_ = static_cast(number_of_items); for (DWORD i = 0; i < number_of_items; ++i) { const tblSellItemPrice& sell_item_price = rPack.inItemPrices[i]; ShopItemPrice* shop_item_price = mgr.FindShopItemPrice(sell_item_price.dwPriceGuid); if (shop_item_price == NULL) { SUNLOG(eCRITICAL_LOG, "[ERROR] PriceInfo Not Found : PriceGuid=%u", sell_item_price.dwPriceGuid); continue; }; ShopItem* shop_item = shop_item_price->GetShopItem(); // f100930.3L, fixed an opposite condition check problem if (FlowControl::FCAssert(shop_item->GetType() == ShopItem::SINGLE)) { SingleItem* single_item = static_cast(shop_item); ItemPiece* const piece = &item_pieces_[i]; piece->ItemCode = single_item->GetItemCode(); piece->Amount = shop_item_price->GetAmount(); piece->UseTime = shop_item_price->GetUseTime(); piece->Enchant = single_item->GetEnchant(); piece->Rank = single_item->GetRank(); piece->ItemGuid = sell_item_price.dwItemGuid; } } } void PackageItem::vSerialize(ShopManager& mgr IN, ArchiveOfStream& ar, eSHOP_SERIALIZE se) { switch(se) { case eSHOP_SERIALIZE_ITEM_LIST_SAVE: { //Release(); // f100905.3L, f100930.4L, remove clear routine ShopItemData* const shop_item_data = GetEditableShopItemData(); // ±âº» ShopItem ------------------------------------------------------------- ar >> shop_item_data->money_type_; //< 0:ij½¬,1:ÇÏÀÓ //< eSHOP_MONEY_TYPE ar >> shop_item_data->cool_time_; //< ±¸¸Å ÄðŸÀÓ ar >> shop_item_data->sell_expiration_date_; BYTE len = 0; ar >> len; ar.Read(package_name_, len); package_name_[len] = '\0'; ar >> len; ar.Read(package_desc_, len); package_desc_[len] = '\0'; // ±âº» ShopItem ------------------------------------------------------------- PRICEGUID PriceGuid = 0; DWORD Price = 0; BYTE SaleRatio = 0; ar >> PriceGuid; ar >> Price; ar >> SaleRatio; package_item_data_.shop_item_price_ = mgr.FindShopItemPrice(PriceGuid); if (package_item_data_.shop_item_price_ == NULL) { package_item_data_.shop_item_price_ = mgr.CreateShopItemPrice(); ShopItemPrice* shop_item_price = GetShopItemPrice(); shop_item_price->AlignFromEachNode(PriceGuid, Price, SaleRatio, this); mgr.AddShopItemPrice(shop_item_price); } ar >> package_item_data_.image_code_; //< À̹ÌÁö ÄÚµå ar >> package_item_data_.number_of_item_pieces_; for (BYTE i = 0; i < package_item_data_.number_of_item_pieces_; ++i) { ItemPiece* piece = &item_pieces_[i]; ar >> piece->ItemCode; ar >> piece->Amount; ar >> piece->UseTime; ar >> piece->Enchant; ar >> piece->Rank; ar >> piece->ItemGuid; } } break; case eSHOP_SERIALIZE_ITEM_LIST_LOAD: { // ±âº» ShopItem ------------------------------------------------------------- ShopItemData* const shop_item_data = GetEditableShopItemData(); ar << shop_item_data->money_type_; //< 0:ij½¬,1:ÇÏÀÓ //< eSHOP_MONEY_TYPE ar << shop_item_data->cool_time_; //< ±¸¸Å ÄðŸÀÓ ar << shop_item_data->sell_expiration_date_; BYTE len = (BYTE)strlen(package_name_); ar << len; ar.Write(package_name_, len); len = (BYTE)strlen(package_desc_); ar << len; ar.Write(package_desc_, len); // ±âº» ShopItem ------------------------------------------------------------- PRICEGUID PriceGuid = 0; DWORD Price = 0; BYTE SaleRatio = 0; if (ShopItemPrice* shop_item_price = GetShopItemPrice()) { PriceGuid = shop_item_price->GetPriceGuid(); Price = shop_item_price->GetPrice(); SaleRatio = shop_item_price->GetSaleRatio(); } ar << PriceGuid; ar << Price; ar << SaleRatio; ar << package_item_data_.image_code_; //< À̹ÌÁö ÄÚµå ar << package_item_data_.number_of_item_pieces_; //< °¡°Ý °³¼ö for (BYTE i = 0; i < package_item_data_.number_of_item_pieces_; ++i) { const ItemPiece* piece = &item_pieces_[i]; ar << piece->ItemCode; ar << piece->Amount; ar << piece->UseTime; ar << piece->Enchant; ar << piece->Rank; ar << piece->ItemGuid; } } break; default: { ASSERT(NULL); } } } void PackageItem::Display() { ShopItem::Display(); char buffer[4096]; // (128 + 1)* 16 < 4096 ShopItemPrice* shop_item_price = package_item_data_.shop_item_price_; int written = _snprintf(buffer, _countof(buffer), ",PriceGuid:%d,Price:%d,ImageCode:%d,SaleRatio:%d\n", shop_item_price->GetPriceGuid(), shop_item_price->GetPrice(), package_item_data_.image_code_, shop_item_price->GetSaleRatio()); const int number_of_pieces = package_item_data_.number_of_item_pieces_; for (int i = 0; i < number_of_pieces; ++i) { const ItemPiece& piece = item_pieces_[i]; written += _snprintf(&buffer[written], _countof(buffer) - written, " ItemCode:%d,Amount:%d,UseTime:%d,Enchant:%d,Rank:%d\n", piece.ItemCode, piece.Amount, piece.UseTime, piece.Enchant, piece.Rank); } buffer[written] = '\0'; printf("%s", buffer); ShopItem::DisplayElement(); } #endif // not defined _NA_0_20110613_GAME_SHOP_RENEWAL