bool NFCPatrolState::RandomPatrol(const NFGUID& self) { //首先,得看有没路径 //没有的话,随机找个地址走吧(以出生点为中心开始找,种子地址)NPCConfigID const std::string& strConfigID = m_pKernelModule->GetPropertyString(self, "NPCConfigID"); const std::string& strNPCID = m_pKernelModule->GetPropertyString(self, "ConfigID"); if (!strConfigID.empty()) { NF_SHARE_PTR<NFIPropertyManager> xPropertyManager = m_pElementInfoModule->GetPropertyManager(strConfigID); if (xPropertyManager) { NF_SHARE_PTR<NFIProperty> xPropertyX = xPropertyManager->GetElement("SeedX"); NF_SHARE_PTR<NFIProperty> xPropertyY = xPropertyManager->GetElement("SeedY"); NF_SHARE_PTR<NFIProperty> xPropertyZ = xPropertyManager->GetElement("SeedZ"); float fCurX = xPropertyX->GetFloat(); float fCurY = xPropertyY->GetFloat(); float fCurZ = xPropertyZ->GetFloat(); float fPosOffestX = (float)(rand() / double(RAND_MAX) - 0.5f); float fPosOffestZ = (float)(rand() / double(RAND_MAX) - 0.5f); fPosOffestX *= 10; fPosOffestZ *= 10; fCurX += fPosOffestX; fCurZ += fPosOffestZ; //if (fCurX > 0.0f && fCurZ > 0.0f) { //看能否寻路,不能寻路则重来 NFObjectStateType eStateType = NFObjectStateType::NOST_RUN; float fRand = (float)(rand() / double(RAND_MAX)); if (fRand < 0.5f) { eStateType = NFObjectStateType::NOST_WALK; } NFCDataList valueList; valueList.AddFloat(fCurX); valueList.AddFloat(fCurY); valueList.AddFloat(fCurZ); m_pKernelModule->DoEvent(self, NFED_ON_CLIENT_REQUIRE_MOVE, valueList); m_pKernelModule->SetPropertyFloat(self, "X", fCurX); m_pKernelModule->SetPropertyFloat(self, "Y", fCurY); m_pKernelModule->SetPropertyFloat(self, "Z", fCurZ); return true; } } } return false; }
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; }