bool NFCCreateRoleModule::ConvertRecordToPB(const NF_SHARE_PTR<NFIRecord>& pRecord, NFMsg::ObjectRecordBase * pRecordData) { pRecordData->set_record_name(pRecord->GetName()); for (int iRow = 0; iRow < pRecord->GetRows(); iRow++) { if (!pRecord->IsUsed(iRow)) { continue; } NFMsg::RecordAddRowStruct* pRowData = pRecordData->add_row_struct(); if (!pRowData) { continue; } pRowData->set_row(iRow); for (int iCol = 0; iCol < pRecord->GetCols(); iCol++) { const int nType = pRecord->GetColType(iCol); switch (nType) { case TDATA_INT: { NFMsg::RecordInt* pPropertyData = pRowData->add_record_int_list(); const NFINT64 xPropertyValue = pRecord->GetInt(iRow, iCol); if (pPropertyData) { pPropertyData->set_col(iCol); pPropertyData->set_row(iRow); pPropertyData->set_data(xPropertyValue); } } break; case TDATA_FLOAT: { NFMsg::RecordFloat* pPropertyData = pRowData->add_record_float_list(); const double xPropertyValue = pRecord->GetFloat(iRow, iCol); if (pPropertyData) { pPropertyData->set_col(iCol); pPropertyData->set_row(iRow); pPropertyData->set_data(xPropertyValue); } } break; case TDATA_STRING: { NFMsg::RecordString* pPropertyData = pRowData->add_record_string_list(); const std::string& xPropertyValue = pRecord->GetString(iRow, iCol); if (pPropertyData) { pPropertyData->set_col(iCol); pPropertyData->set_row(iRow); pPropertyData->set_data(xPropertyValue); } } break; case TDATA_OBJECT: { NFMsg::RecordObject* pPropertyData = pRowData->add_record_object_list(); const NFGUID xPropertyValue = pRecord->GetObject(iRow, iCol); if (pPropertyData) { pPropertyData->set_col(iCol); pPropertyData->set_row(iRow); *pPropertyData->mutable_data() = NFINetModule::NFToPB(xPropertyValue); } } break; case TDATA_VECTOR2: { NFMsg::RecordVector2* pPropertyData = pRowData->add_record_vector2_list(); const NFVector2 xPropertyValue = pRecord->GetVector2(iRow, iCol); if (pPropertyData) { pPropertyData->set_col(iCol); pPropertyData->set_row(iRow); NFMsg::Vector2* pVec = pPropertyData->mutable_data(); pVec->set_x(xPropertyValue.X()); pVec->set_y(xPropertyValue.Y()); } } break; case TDATA_VECTOR3: { NFMsg::RecordVector3* pPropertyData = pRowData->add_record_vector3_list(); const NFVector3 xPropertyValue = pRecord->GetVector3(iRow, iCol); if (pPropertyData) { pPropertyData->set_col(iCol); pPropertyData->set_row(iRow); NFMsg::Vector3* pVec = pPropertyData->mutable_data(); pVec->set_x(xPropertyValue.X()); pVec->set_y(xPropertyValue.Y()); pVec->set_z(xPropertyValue.Z()); } } break; default: break; } } } return true; }
int NFCBuffModule::ProcessBuffValuePropertyReferAbsoluteValue( const NFIDENTID& self, NFIBuffConfigModule::NFCBuffConfig* pBuffConfig, const NFIDENTID& releaserIdent ) { //buff group property int nBuffGroup = 0; //RUNTIME_BUFF_INFO NF_SHARE_PTR<NFIObject> pObject = m_pKernelModule->GetObject( self ); NF_SHARE_PTR<NFIRecord> pBuffRecord = pObject->GetRecordManager()->GetElement( mstrRunTimeEffectTable ); if ( pBuffRecord ) { NF_SHARE_PTR<NFIRecord> pPropertyGroupRecord = pObject->GetRecordManager()->GetElement( mstrPropertyTable ); std::string strPropertyList; std::string strPropertyName; int* pnEffectValue = pBuffConfig->First( strPropertyName ); while ( pnEffectValue ) { NF_SHARE_PTR<NFIProperty> pProperty = pObject->GetPropertyManager()->GetElement( strPropertyName ); if ( pProperty ) { char szEffectValue[MAX_PATH] = {0}; printf( szEffectValue, "%d", *pnEffectValue ); strPropertyList.append( strPropertyName ); strPropertyList.append( "," ); strPropertyList.append( szEffectValue ); strPropertyList.append( ";" ); //相继设置属性到buff group,增值 //从属性系统得到属性应该在的col函数 int nPropertyGroupCol = 0; int nPropertyBuffGroupRow = 0; TDATA_TYPE eColType = pPropertyGroupRecord->GetColType( nPropertyGroupCol ); if ( NFIBuffConfigModule::BuffReverseType::ERT_NEED_REVERSE == pBuffConfig->NeedReverseType ) { //需要还原 switch ( eColType ) { case TDATA_INT: pPropertyGroupRecord->SetInt( nPropertyBuffGroupRow, nPropertyGroupCol, *pnEffectValue ); break; case TDATA_FLOAT: pPropertyGroupRecord->SetFloat( nPropertyBuffGroupRow, nPropertyGroupCol, float( *pnEffectValue ) ); break; case TDATA_DOUBLE: pPropertyGroupRecord->SetDouble( nPropertyBuffGroupRow, nPropertyGroupCol, double( *pnEffectValue ) ); break; default: break; } } else if ( NFIBuffConfigModule::BuffReverseType::ERT_NO_REVERSE == pBuffConfig->NeedReverseType ) { //不需要还原 NFIDataList::TData valueEffectValue; switch ( eColType ) { case TDATA_INT: valueEffectValue.nType = TDATA_INT; valueEffectValue.variantData = NFINT64( *pnEffectValue ); break; case TDATA_FLOAT: valueEffectValue.nType = TDATA_FLOAT; valueEffectValue.variantData = float( *pnEffectValue ); break; case TDATA_DOUBLE: valueEffectValue.nType = TDATA_DOUBLE; valueEffectValue.variantData = double( *pnEffectValue ); break; default: break; } //const NFIDataList& oldValue = pProperty->GetValue(); pObject->GetPropertyManager()->SetProperty( strPropertyName, valueEffectValue ); } pnEffectValue = pBuffConfig->Next( strPropertyName ); } //还原与否,都需要保存在runtimebuff表 NFCDataList valueBuffProperty; valueBuffProperty.AddString( strPropertyName.c_str() ); valueBuffProperty.AddObject( releaserIdent ); valueBuffProperty.AddFloat( pBuffConfig->EffectTimeInterval ); valueBuffProperty.AddInt( pBuffConfig->EffectTimeValue ); valueBuffProperty.AddString( strPropertyName.c_str() ); pBuffRecord->AddRow( -1, valueBuffProperty ); } } return 0; }
const bool NFCObjectSaveModule::SaveDataToNoSql( const NFIDENTID& self ) { NF_SHARE_PTR<NFIObject> pObject = m_pKernelModule->GetObject( self ); if ( pObject.get() ) { NF_SHARE_PTR<NFIPropertyManager> pProManager = pObject->GetPropertyManager(); NF_SHARE_PTR<NFIRecordManager> pRecordManager = pObject->GetRecordManager(); std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; //witch property to save std::string strName; NF_SHARE_PTR<NFIProperty> xProperty = pProManager->First(strName); while (xProperty) { if (xProperty->GetSave()) { vFieldVec.push_back(strName); vValueVec.push_back(xProperty->ToString()); } strName.clear(); xProperty = pProManager->Next(strName); } //witch Record to save NF_SHARE_PTR<NFIRecord> xRecord = pRecordManager->First(strName); while (xRecord) { if (xRecord->GetSave()) { NFMsg::PlayerRecordBase xRecordData; xRecordData.set_record_name(strName); for (int i = 0; i < xRecord->GetRows(); ++i) { if(xRecord->IsUsed(i)) { for (int j = 0; j < xRecord->GetCols(); ++j) { switch (xRecord->GetColType(j)) { case TDATA_INT: { NFMsg::RecordInt* pRecordInt = xRecordData.add_record_int_list(); pRecordInt->set_row(i); pRecordInt->set_col(j); pRecordInt->set_data(xRecord->GetInt(i, j)); } break; case TDATA_FLOAT: { NFMsg::RecordFloat* xRecordFloat = xRecordData.add_record_float_list(); xRecordFloat->set_row(i); xRecordFloat->set_col(j); xRecordFloat->set_data(xRecord->GetFloat(i, j)); } break; case TDATA_STRING: { NFMsg::RecordString* xRecordString = xRecordData.add_record_string_list(); xRecordString->set_row(i); xRecordString->set_col(j); xRecordString->set_data(xRecord->GetString(i, j)); } break; case TDATA_OBJECT: { NFMsg::RecordObject* xRecordObejct = xRecordData.add_record_object_list(); xRecordObejct->set_row(i); xRecordObejct->set_col(j); *xRecordObejct->mutable_data() = NFINetModule::NFToPB(xRecord->GetObject(i, j)); } break; default: break; } } } } std::string strRecordValue; if(xRecordData.SerializeToString(&strRecordValue)) { vFieldVec.push_back(strName); vValueVec.push_back(strRecordValue); } } strName.clear(); xRecord = pRecordManager->Next(strName); } const std::string& strClass = m_pKernelModule->GetPropertyString(self, "ClassName"); if(!m_pClusterSQLModule->Updata(strClass, self.ToString(), vFieldVec, vValueVec)) { return false; } return true; } return false; }