BOOL CCashShop::GiveBuyItemToInventory(LPOBJ lpObj, int iItemGuid) { BYTE btPosition = 0; BYTE btResult = 0; BOOL bEmptySpace = FALSE; CASHSHOP_ITEMLIST* lpItemInfo = NULL; CItem pItem; int iItemCode = 0; BYTE ExOption[MAX_EXOPTION_SIZE]; lpItemInfo = this->SearchItemList(iItemGuid); iItemCode = ITEMGET(lpItemInfo->btItemType, lpItemInfo->wItemIndex); bEmptySpace = this->CheckInventoryEmptySpace(lpObj, lpItemInfo); if ( bEmptySpace == FALSE ) return FALSE; pItem.Convert(iItemCode, lpItemInfo->btItemSkillOpion, lpItemInfo->btItemLuckOption, lpItemInfo->btItemAddOption, lpItemInfo->btItemExOption, 0, 0, NULL, 0xFF, TEMP_PERIOD_VAR, CURRENT_DB_VERSION); pItem.m_Level = lpItemInfo->btItemLevel; pItem.m_Durability = lpItemInfo->btItemDuration; ItemIsBufExOption(ExOption, &pItem); ItemSerialCreateSend(lpObj->m_Index, 0xEC, lpObj->X, lpObj->Y, pItem.m_Type, pItem.m_Level, pItem.m_Durability, pItem.m_Option1, pItem.m_Option2, pItem.m_Option3, lpObj->m_Index, pItem.m_NewOption, 0); LogAddTD("[CashShop][Buy Item Create in Inven] - User(ID:%s,Name:%s) Item(Name:%s,Code:%d,Skill:%d,Luck:%d,Add:%d,Ex(%d:%d:%d:%d:%d:%d))", lpObj->AccountID, lpObj->Name, ItemAttribute[iItemCode].Name, iItemCode, pItem.m_Option1, pItem.m_Option2, pItem.m_Option3, ExOption[0], ExOption[1], ExOption[2], ExOption[3], ExOption[4], ExOption[5]); return TRUE; }
int CCashLotterySystem::GetItem(CItem *lpItem) { int iItemCategory = 0; int iMaxItemCountInCategory = 0; int iItemSelectNumber = 0; CItem ReturnItem; int iItemNumber = 0; int iItemType = 0; int iItemIndex = 0; int iItemLevel = 0; int iItemLevelMin = 0; int iItemLevelMax = 0; int iSkillOption = 0; int iLuckOption = 0; int iAddOption = 0; int iExOption = 0; int iSkillOptionRate = 0; int iLuckOptionRate = 0; int iAddOptionRate = 0; int iExOptionRate = 0; BYTE btSkillOption = 0; BYTE btLuckOption = 0; BYTE btAddOption = 0; BYTE btExOption = 0; BYTE btExOptionKey = 0; BYTE btExOptionValue1 = 0; BYTE btExOptionValue2 = 0; int iTemp = 0; int iRandomKey = 0; BYTE ExOption[MAX_EXOPTION_SIZE]; if ( lpItem == NULL ) return -1; iItemCategory = this->CategoryRandomPool.GetRandomValue(eRANDOMPOOL_BY_WEIGHT); if ( iItemCategory < 0 || iItemCategory > MAX_LOTTERY_ITEM_CATEGORY ) return -1; iMaxItemCountInCategory = this->LotteryItemListCount[iItemCategory]; if ( iMaxItemCountInCategory <= 0 || iMaxItemCountInCategory > MAX_LOTTERY_ITEM_COUNT ) return -1; iItemSelectNumber = rand() % iMaxItemCountInCategory; if ( iItemSelectNumber < 0 || iItemSelectNumber > MAX_LOTTERY_ITEM_COUNT ) return -1; iItemType = this->LotteryItemList[iItemCategory][iItemSelectNumber].btItemType; iItemIndex = this->LotteryItemList[iItemCategory][iItemSelectNumber].wItemIndex; iItemLevelMin = this->LotteryItemList[iItemCategory][iItemSelectNumber].btItemLevelMin; iItemLevelMax = this->LotteryItemList[iItemCategory][iItemSelectNumber].btItemLevelMax; iSkillOption = this->LotteryItemList[iItemCategory][iItemSelectNumber].btSkillOption; iLuckOption = this->LotteryItemList[iItemCategory][iItemSelectNumber].btLuckOption; iAddOption = this->LotteryItemList[iItemCategory][iItemSelectNumber].btAddOption; iExOption = this->LotteryItemList[iItemCategory][iItemSelectNumber].btExOption; if ( iItemType == -1 || iItemIndex == -1 || iItemLevelMin == -1 || iItemLevelMax == -1 || iItemLevelMin == -1 || iItemLevelMax == -1 || iSkillOption == -1 || iLuckOption == -1 || iAddOption == -1 || iExOption == -1 ) return -1; iSkillOptionRate = this->LotteryItemOptionRate[iItemCategory].iSkillOptionRate; iLuckOptionRate = this->LotteryItemOptionRate[iItemCategory].iLuckOptionRate; iAddOptionRate = this->LotteryItemOptionRate[iItemCategory].iAddOptionRate; iExOptionRate = this->LotteryItemOptionRate[iItemCategory].iExOptionRate; iRandomKey = rand() % (iItemLevelMax - iItemLevelMin + 1); iItemLevel = iItemLevelMin + iRandomKey; if ( iItemLevel > iItemLevelMax || iItemLevel < iItemLevelMin ) iItemLevel = iItemLevelMin; if ( iSkillOption == 1 ) { iRandomKey = GetLargeRand() % 1000000; if ( iRandomKey < iSkillOptionRate ) btSkillOption = 1; } if ( iLuckOption == 1 ) { iRandomKey = GetLargeRand() % 1000000; if ( iRandomKey < iLuckOptionRate ) btLuckOption = 1; } if ( iAddOption == 1 ) { iRandomKey = GetLargeRand() % 1000000; if ( iRandomKey < iAddOptionRate ) { btAddOption = this->AddOptionRandomPool.GetRandomValue(eRANDOMPOOL_BY_WEIGHT); iTemp = btAddOption; } } if ( iExOption == 1 ) { iRandomKey = GetLargeRand() % 1000000; if ( iRandomKey < iExOptionRate ) { btExOptionValue1 = this->ExOptionRandomPool.GetRandomValue(eRANDOMPOOL_BY_WEIGHT); btExOptionKey = 1 << (int)(btExOptionValue1); btExOption |= btExOptionKey; iItemLevel = 0; if ( (rand() % 4) == 0 ) { btExOptionValue2 = this->ExOptionRandomPool.GetRandomValue(eRANDOMPOOL_BY_WEIGHT); if ( btExOptionValue1 != btExOptionValue2 ) { btExOptionKey = 1 << (int)(btExOptionValue2); btExOption |= btExOptionKey; } } } } else if ( iExOption == 2 ) { btExOptionValue1 = this->ExOptionRandomPool.GetRandomValue(eRANDOMPOOL_BY_WEIGHT); btExOptionKey = 1 << (int)(btExOptionValue1); btExOption |= btExOptionKey; iItemLevel = 0; if ( (rand() % 4) == 0 ) { btExOptionValue2 = this->ExOptionRandomPool.GetRandomValue(eRANDOMPOOL_BY_WEIGHT); if ( btExOptionValue1 != btExOptionValue2 ) { btExOptionKey = 1 << (int)(btExOptionValue2); btExOption |= btExOptionKey; } } } if ( btAddOption != iTemp ) btAddOption = 0; iItemNumber = ItemGetNumberMake(iItemType, iItemIndex); lpItem->Convert(iItemNumber, btSkillOption, btLuckOption, btAddOption, btExOption, 0, 0, 0, -1, CURRENT_DB_VERSION); lpItem->m_Level = iItemLevel; if ( !lpItem->IsItem() ) return -1; ItemIsBufExOption(ExOption, lpItem); LogAddTD("[CashItem][LotteryItem] Get Item Category:%d,Index:%d (Name:%s,Type:%d,Index:%d,Level:%d) Skill:%d,Luck:%d,AddOption:%d,ExOption(%d,%d,%d,%d,%d,%d)", iItemCategory, iItemSelectNumber, ItemAttribute[iItemNumber].Name, iItemType, iItemIndex, iItemLevel, btSkillOption, btLuckOption, btAddOption, ExOption[0], ExOption[1], ExOption[2], ExOption[3], ExOption[4], ExOption[5]); return iItemCategory; }