/*! Adds new item block to model Use in cases when inserting / appending an adjacent block of items \param itemsList list of adjacent items */ void CaItemModelPrivate::addItemBlock(const QList<int> &itemsList) { CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::addItemBlock"); if (!itemsList.isEmpty()) { int firstRow = itemRow(itemsList.first()); int lastRow = itemRow(itemsList.last()); m_q->beginInsertRows(QModelIndex(), firstRow, lastRow); for (int i = 0; i < itemsList.count(); ++i) { mEntries.insert(firstRow + i, itemsList.at(i)); } m_q->endInsertRows(); emit m_q->scrollTo(firstRow, QAbstractItemView::PositionAtTop); } CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::addItemBlock"); }
void DiamondBuyData::MakeComEffectx() { auto diamondTableList = CfgData::getInstance()->GetCfgTableId("DiamondItem"); int cfgId = 0; for (auto iter = diamondTableList->begin(); iter != diamondTableList->end(); ++iter) { cfgId = *iter; CfgDataRow itemRow(cfgId); if (itemRow.GetValue(CfgField::GenericID)->asInt() != 1) continue; // 非进度通用 if (GetDiamondData(cfgId)->asInt() != 1) continue; // 还未购买 // 检查其功能有没生效 auto functionMap = itemRow.GetValue(CfgField::FunctionID_M)->asIntMultiKeyMap(); auto numVector = itemRow.GetValue(CfgField::Numbe_V)->asValueVector(); int idx = 0; for (auto iter = functionMap.begin(); iter != functionMap.end(); ++iter) { int itemID = iter->second.asInt(); int addNum = numVector[idx++].asInt(); switch (iter->first) { case 100700010: // 解锁地图 { auto checkIter = UserData::getInstance()->Get_MVI_Value(UserDataEnum::ExploreMaps, itemID); if (checkIter == Value::Null) { UserData::getInstance()->Update_VMI_Fun(UserDataEnum::ExploreMaps, itemID, 0); } } break; case 100700011: // 获得建筑 { auto checkIter = UserData::getInstance()->Get_MVI_Value(UserDataEnum::MakeBuild, itemID); if (checkIter == Value::Null) { UserData::getInstance()->Update_VMI_Fun(UserDataEnum::MakeBuild, itemID, (int)MakeBuildUI::MakeBuildStatus::MakeFinish, true); } } break; case 100700012: // 获得科技 { bool checkBool = UserData::getInstance()->Check_VI_Fun(UserDataEnum::TalentList, Value(itemID)); if (!checkBool) { UserData::getInstance()->Add_VI_Fun(UserDataEnum::TalentList, itemID); CfgDataRow talentDataRow(itemID); auto langId = talentDataRow.GetValue(CfgField::Schedule)->asInt(); auto langText = MultiLanguage::getInstance()->GetText(langId); MsgListNode::getInstance()->NewMsg( langText ); AchievementSystem::getInstance()->CheckAchievement(UserEventType::StudyTalent, itemID); } } break; case 100700013: // 增加离线生产时间 { ProductionItem::getInstance()->setMaxSleepProductionTime(addNum); } break; default: break; } } } }
void DiamondBuyData::init() { bool isSave = false; if (m_DiamondDataVm == nullptr) { m_DiamondDataVm = new (std::nothrow) ValueMap(); } auto diamondTableList = CfgData::getInstance()->GetCfgTableId("DiamondItem"); int cfgId = 0; for (auto iter = diamondTableList->begin(); iter != diamondTableList->end(); ++iter) { /* 进度通用性与类型: 1 - int(进度通用则存储是否购买, 1为已购买,0为未购买) 0 - map(进度不可通用则存储map,[进度, 购买次数],进度:1或2或3) */ cfgId = *iter; if (GetDiamondData(cfgId) == nullptr) { CfgDataRow itemRow(cfgId); if (itemRow.GetValue(CfgField::GenericID)->asInt() == 1) { m_DiamondDataVm->insert(pair<string, Value>(StringUtils::format("%d", *iter), Value(0))); } else { m_DiamondDataVm->insert(pair<string, Value>(StringUtils::format("%d", *iter), Value(ValueMap()))); } isSave = true; } } if (isSave) SaveDiamondData(); }
bool HoldBuildUI::IsSaveBag(int itemId) { CfgDataRow itemRow(itemId); // 是否占据格子 bool isOty = itemRow.GetValue(CfgField::NonSpace)->asInt() == 1; bool result = false; auto nowNum = GetBagItemNum(); auto bag_maxNum = UserData::getInstance()->GetUserData(UserDataEnum::BackPackMaxNum)->asInt(); if(nowNum < bag_maxNum || !isOty) { auto iter = m_BagItem->begin(); while (iter != m_BagItem->end()) { if(iter->first == itemId) break; iter ++; } if( iter == m_BagItem->end()) { m_BagItem->push_back(pair<int, int>( itemId, 1)); }else { iter->second += 1; } result = true; } return result; }
/*! Adds new item to model \param id id of item to add */ void CaItemModelPrivate::addItem(int id) { CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::addItem"); int row = itemRow(id); //we use beginInsertRows and endInsertRows to emit proper signal //(see Qt documentation of QAbstractItemModel) if (mEntries.indexOf(id) < 0 && row >= 0) { if (row > mEntries.count()) { m_q->beginInsertRows(QModelIndex(), mEntries.count(), mEntries.count()); mEntries.insert(mEntries.count(), id); } else { m_q->beginInsertRows(QModelIndex(), row , row); mEntries.insert(row, id); } m_q->endInsertRows(); } else if (row == -1) { //we udpade whole model because we do not know parent collecion for given item updateModel(); } CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::addItem"); }