#include "stdafx.h" #include "./SCLottoInfo.h" #include "BitStream.hpp" #include "SCItemSlot.h" #include "LotteryInfoParser.h" //================================================================================================== // const SCLottoInfo::MiniSlot SCLottoInfo::NullMiniSlot = { 0, }; void SCLottoInfo::SetInfo(nsSlot::SerializeItemOption::sLottery* src, const BASE_ITEMINFO* item_info) { __UNUSED(item_info); Clear(); SLOT_BITBOUND_SET(src->Index, SCLottoInfo::NumberOfBits_LotteryIndex); SLOT_BITBOUND_SET(src->Identity, SCLottoInfo::NumberOfBits_IdentityStatus); SLOT_BITBOUND_SET(src->Count, SCLottoInfo::NumberOfBits_NumberOfMiniSlots); lottery_index_ = WORD(src->Index); identity_status_ = BOOLEAN(src->Identity); number_of_minislots_ = static_cast(src->Count); for(int i = 0; i < _countof(mini_slots_); ++i) { SLOT_BITBOUND_SET(src->Slots[i].Random, NumberOfBits_MiniSlot_IsRandom); SLOT_BITBOUND_SET(src->Slots[i].Exist, NumberOfBits_MiniSlot_ExistItem); SLOT_BITBOUND_SET(src->Slots[i].Position, NumberOfBits_MiniSlot_InfoPos); SCLottoInfo::MiniSlot& dest = mini_slots_[i]; dest.Random = BOOLEAN(src->Slots[i].Random); dest.ExistItem = BOOLEAN(src->Slots[i].Exist); dest.InfoPos = BYTE(src->Slots[i].Position); } } void SCLottoInfo::GetInfo(nsSlot::SerializeItemOption::sLottery* dest) { SLOT_BITBOUND_SET(lottery_index_, NumberOfBits_LotteryIndex); SLOT_BITBOUND_SET(identity_status_, NumberOfBits_IdentityStatus); SLOT_BITBOUND_SET(number_of_minislots_, NumberOfBits_NumberOfMiniSlots); dest->Index = lottery_index_; dest->Identity = identity_status_; dest->Count = number_of_minislots_; for(int i = 0; i < _countof(mini_slots_); ++i) { SCLottoInfo::MiniSlot& src = mini_slots_[i]; SLOT_BITBOUND_SET_1B(src.Random , NumberOfBits_MiniSlot_IsRandom); SLOT_BITBOUND_SET_1B(src.ExistItem , NumberOfBits_MiniSlot_ExistItem); SLOT_BITBOUND_SET_1B(src.InfoPos , NumberOfBits_MiniSlot_InfoPos); dest->Slots[i].Random = src.Random; dest->Slots[i].Exist = src.ExistItem; dest->Slots[i].Position = src.InfoPos; } } void SCLottoInfo::ClearMiniSlot(POSTYPE pos) { if(!FlowControl::FCAssert(number_of_minislots_ && ValidPosition(pos))) return; ZeroMemory(&mini_slots_[pos], sizeof(mini_slots_[pos])); if(number_of_minislots_) --number_of_minislots_; } void SCLottoInfo::Move(POSTYPE from, POSTYPE to) { if(FlowControl::FCAssert(ValidPosition(from) && ValidPosition(to))) { const MiniSlot temp = mini_slots_[from]; mini_slots_[from] = mini_slots_[to]; mini_slots_[to] = temp; } } // ½ºÅ©¸³Æ®¿¡¼­ m_LottoIndex¿¡ ÇØ´çÇÏ´Â Á¤º¸¸¦ ·£´ýÀ¸·Î // minislot¿¡ ¼³Á¤ÇÑ´Ù. BOOLEAN SCLottoInfo::Identity() { if(identity_status_) return false; // DONE: f110610.2L, waverix, °ü·Ã ·ÎÁ÷À» ÆÄ¾ÇÇÒ ÇÊ¿ä ÀÖ´Ù. // ÀÏ´Ü µ¿ÀÏÇÑ µ¿ÀÛÀ¸·Î ó¸®Çϰí, ¹®Á¦Á¡À» ÆÄ¾ÇÇÏÀÚ. //minislot_count »ç¿ëÀÌ ÇÊ¿äÇÒ µí Çѵ¥, ·ÎÁ÷ÀÌ Á» ´õ ºÐ¼®µÉ ÇÊ¿ä ÀÖÀ½. LotteryInfoParser* pLotteryInfoParser = LotteryInfoParser::Instance(); const LotteryIndexGroup* lottery_index_group = pLotteryInfoParser->GetLotteryIndexGroup(lottery_index_); if(lottery_index_group != 0) { number_of_minislots_ = lottery_index_group->GetMiniSlotCount(); ASSERT(0 < number_of_minislots_ && number_of_minislots_ <= MAX_PANDORA_SLOT_NUM); number_of_minislots_ = min(number_of_minislots_, MAX_PANDORA_SLOT_NUM); for(int i = 0; i < number_of_minislots_; ++i) { const MiniSlotInfo* mini_slot_info = lottery_index_group->GetMiniSlotInfo(i); assert(mini_slot_info != NULL); if (MiniSlot* dest = &mini_slots_[i]) { dest->InfoPos = static_cast(i); dest->ExistItem = true; dest->Random = mini_slot_info->Random != false; }; } identity_status_ = true; } else { SUNLOG(eCRITICAL_LOG, _T("|[%s]|can't find lottery info(%d)|"), __FUNCTION__, lottery_index_); return FALSE; } return TRUE; } //================================================================================================== //================================================================================================== //================================================================================================== //