int NFCSceneAOIModule::OnPlayerGroupEvent(const NFGUID & self, const std::string & strPropertyName, const NFData & oldVar, const NFData & newVar) { //this event only happened in the same scene int nSceneID = m_pKernelModule->GetPropertyInt32(self, NFrame::IObject::SceneID()); int nOldGroupID = oldVar.GetInt32(); int nNewGroupID = newVar.GetInt32(); //maybe form 0, maybe not, only three stuation //example1: 0 -> 1 ==> new_group > 0 && old_group <= 0 //example2: 1 -> 2 ==> new_group > 0 && old_group > 0 //example3: 5 -> 0 ==> new_group <= 0 && old_group > 0 if (nNewGroupID > 0) { if (nOldGroupID > 0) { //example2: 1 -> 2 ==> new_group > 0 && old_group > 0 //step1: leave NFDataList valueAllOldNPCListNoSelf; NFDataList valueAllOldPlayerListNoSelf; m_pKernelModule->GetGroupObjectList(nSceneID, nOldGroupID, valueAllOldNPCListNoSelf, false, self); m_pKernelModule->GetGroupObjectList(nSceneID, nOldGroupID, valueAllOldPlayerListNoSelf, true, self); OnObjectListLeave(valueAllOldPlayerListNoSelf, NFDataList() << self); OnObjectListLeave(NFDataList() << self, valueAllOldPlayerListNoSelf); OnObjectListLeave(NFDataList() << self, valueAllOldNPCListNoSelf); } else { //example1: 0 -> 1 == > new_group > 0 && old_group <= 0 //only use step2 that enough } //step2: enter NFDataList valueAllNewNPCListNoSelf; NFDataList valueAllNewPlayerListNoSelf; m_pKernelModule->GetGroupObjectList(nSceneID, nNewGroupID, valueAllNewNPCListNoSelf, false, self); m_pKernelModule->GetGroupObjectList(nSceneID, nNewGroupID, valueAllNewPlayerListNoSelf, true, self); OnObjectListEnter(valueAllNewPlayerListNoSelf, NFDataList() << self); OnObjectListEnter(NFDataList() << self, valueAllNewPlayerListNoSelf); OnObjectListEnter(NFDataList() << self, valueAllNewNPCListNoSelf); //bc others data to u for (int i = 0; i < valueAllNewNPCListNoSelf.GetCount(); i++) { NFGUID identOld = valueAllNewNPCListNoSelf.Object(i); OnPropertyEnter(NFDataList() << self, identOld); OnRecordEnter(NFDataList() << self, identOld); OnObjectListEnterFinished(NFDataList() << self, NFDataList() << identOld); } //bc others data to u for (int i = 0; i < valueAllNewPlayerListNoSelf.GetCount(); i++) { NFGUID identOld = valueAllNewPlayerListNoSelf.Object(i); OnPropertyEnter(NFDataList() << self, identOld); OnRecordEnter(NFDataList() << self, identOld); OnObjectListEnterFinished(NFDataList() << self, NFDataList() << identOld); } //bc u data to others OnPropertyEnter(valueAllNewPlayerListNoSelf, self); OnRecordEnter(valueAllNewPlayerListNoSelf, self); OnObjectListEnterFinished(valueAllNewPlayerListNoSelf, NFDataList() << self); } else { if (nOldGroupID > 0) { //example3: 5 -> 0 ==> new_group <= 0 && old_group > 0 //step1: leave NFDataList valueAllOldNPCListNoSelf; NFDataList valueAllOldPlayerListNoSelf; m_pKernelModule->GetGroupObjectList(nSceneID, nOldGroupID, valueAllOldNPCListNoSelf, false, self); m_pKernelModule->GetGroupObjectList(nSceneID, nOldGroupID, valueAllOldPlayerListNoSelf, true, self); OnObjectListLeave(valueAllOldPlayerListNoSelf, NFDataList() << self); OnObjectListLeave(NFDataList() << self, valueAllOldPlayerListNoSelf); OnObjectListLeave(NFDataList() << self, valueAllOldNPCListNoSelf); } } return 0; }