bool NFCRecord::SetVector3(const int nRow, const int nCol, const NFVector3& value) { if (!ValidPos(nRow, nCol)) { return false; } if (TDATA_VECTOR3 != GetColType(nCol)) { return false; } if (!IsUsed(nRow)) { return false; } NFData var; var.SetVector3(value); NF_SHARE_PTR<NFData>& pVar = mtRecordVec.at(GetPos(nRow, nCol)); //must have memory if (nullptr == pVar) { return false; } if (var == *pVar) { return false; } if (mtRecordCallback.size() == 0) { pVar->SetVector3(value); } else { NFData oldValue; oldValue.SetVector3(pVar->GetVector3()); pVar->SetVector3(value); RECORD_EVENT_DATA xEventData; xEventData.nOpType = RECORD_EVENT_DATA::Update; xEventData.nRow = nRow; xEventData.nCol = nCol; xEventData.strRecordName = mstrRecordName; OnEventHandler(mSelf, xEventData, oldValue, *pVar); } return true; }
int NFGamePVPModule::OnNPCHPEvent(const NFGUID & self, const std::string & strPropertyName, const NFData & oldVar, const NFData & newVar) { if (newVar.GetInt() <= 0) { const NFGUID& identAttacker = m_pKernelModule->GetPropertyObject(self, NFrame::NPC::LastAttacker()); const std::string& strCnfID = m_pKernelModule->GetPropertyString(self, NFrame::NPC::ConfigID()); int nExp = m_pKernelModule->GetPropertyInt(self, NFrame::NPC::EXP()); if (!identAttacker.IsNull()) { if (m_pKernelModule->GetPropertyString(identAttacker, NFrame::IObject::ClassName()) == NFrame::Player::ThisName()) { //is hero? int nSceneID = m_pKernelModule->GetPropertyInt32(identAttacker, NFrame::Player::SceneID()); int nFightingStar = m_pKernelModule->GetPropertyInt32(identAttacker, NFrame::Player::FightingStar()); int nCup = m_pKernelModule->GetPropertyInt(identAttacker, NFrame::Player::Cup()); int nOpponentCup = m_pKernelModule->GetPropertyInt(identAttacker, NFrame::Player::OpponentCup()); NFGUID xViewOpponent = m_pKernelModule->GetPropertyObject(identAttacker, NFrame::Player::OpponentID()); NFGUID xOpponentFighting = m_pKernelModule->GetPropertyObject(identAttacker, NFrame::Player::OpponentFighting()); E_SCENE_TYPE sceneType = (E_SCENE_TYPE)m_pElementModule->GetPropertyInt(std::to_string(nSceneID), NFrame::Scene::Type()); if (sceneType == E_SCENE_TYPE::SCENE_TYPE_SINGLE_CLONE_SCENE || sceneType == E_SCENE_TYPE::SCENE_TYPE_MULTI_CLONE_SCENE) { NFMsg::ENPCType eNPCType = (NFMsg::ENPCType)(m_pElementModule->GetPropertyInt(strCnfID, NFrame::NPC::NPCType())); if (eNPCType == NFMsg::ENPCType::ENPCTYPE_HERO) { nFightingStar++; m_pKernelModule->SetPropertyInt(identAttacker, NFrame::Player::FightingStar(), nFightingStar); if (nFightingStar >= 2) { if (nCup > nOpponentCup) { m_pKernelModule->SetPropertyInt(identAttacker, NFrame::Player::WonCup(), 5 * nFightingStar); } else { m_pKernelModule->SetPropertyInt(identAttacker, NFrame::Player::WonCup(), 3 * nFightingStar); } } } //add exp for hero } } } } return 0; }
bool NFCClassModule::AddPropertys(rapidxml::xml_node<>* pPropertyRootNode, NF_SHARE_PTR<NFIClass> pClass) { for (rapidxml::xml_node<>* pPropertyNode = pPropertyRootNode->first_node(); pPropertyNode; pPropertyNode = pPropertyNode->next_sibling()) { if (pPropertyNode) { const char* strPropertyName = pPropertyNode->first_attribute("Id")->value(); if (pClass->GetPropertyManager()->GetElement(strPropertyName)) { //error NFASSERT(0, strPropertyName, __FILE__, __FUNCTION__); continue; } const char* pstrType = pPropertyNode->first_attribute("Type")->value(); const char* pstrPublic = pPropertyNode->first_attribute("Public")->value(); const char* pstrPrivate = pPropertyNode->first_attribute("Private")->value(); const char* pstrSave = pPropertyNode->first_attribute("Save")->value(); const char* pstrCache = pPropertyNode->first_attribute("Cache")->value(); const char* pstrRef = pPropertyNode->first_attribute("Ref")->value(); const char* pstrUpload = pPropertyNode->first_attribute("Upload")->value(); bool bPublic = lexical_cast<bool>(pstrPublic); bool bPrivate = lexical_cast<bool>(pstrPrivate); bool bSave = lexical_cast<bool>(pstrSave); bool bCache = lexical_cast<bool>(pstrCache); bool bRef = lexical_cast<bool>(pstrRef); bool bUpload = lexical_cast<bool>(pstrUpload); NFData varProperty; if (TDATA_UNKNOWN == ComputerType(pstrType, varProperty)) { //std::cout << "error:" << pClass->GetTypeName() << " " << pClass->GetInstancePath() << ": " << strPropertyName << " type error!!!" << std::endl; NFASSERT(0, strPropertyName, __FILE__, __FUNCTION__); } //printf( " Property:%s[%s]\n", pstrPropertyName, pstrType ); NF_SHARE_PTR<NFIProperty> xProperty = pClass->GetPropertyManager()->AddProperty(NFGUID(), strPropertyName, varProperty.GetType()); xProperty->SetPublic(bPublic); xProperty->SetPrivate(bPrivate); xProperty->SetSave(bSave); xProperty->SetCache(bCache); xProperty->SetRef(bRef); xProperty->SetUpload(bUpload); } } return true; }
int NFCGamePVPModule::OnPlayerHPEvent(const NFGUID & self, const std::string & strPropertyName, const NFData & oldVar, const NFData & newVar) { //is pvp int pvpType = m_pKernelModule->GetPropertyInt(self, NFrame::Player::PVPType()); if (pvpType == NFMsg::EPVPType::PVP_INDIVIDUAL) { if (newVar.GetInt() <= 0) { m_pScheduleModule->AddSchedule(self, "NFCGamePVPModule::OnDeadSwapHeroHeart", this, &NFCGamePVPModule::OnDeadSwapHeroHeart, 5.0f, 1); } } return 0; }
int NFCRecord::FindRowByColValue(const int nCol, const NFData& var, NFDataList& varResult) { if (!ValidCol(nCol)) { return -1; } NFDATA_TYPE eType = var.GetType(); if (eType != mVarRecordType->Type(nCol)) { return -1; } switch (eType) { case TDATA_INT: return FindInt(nCol, var.GetInt(), varResult); break; case TDATA_FLOAT: return FindFloat(nCol, var.GetFloat(), varResult); break; case TDATA_STRING: return FindString(nCol, var.GetString(), varResult); break; case TDATA_OBJECT: return FindObject(nCol, var.GetObject(), varResult); break; case TDATA_VECTOR2: return FindVector2(nCol, var.GetVector2(), varResult); break; case TDATA_VECTOR3: return FindVector3(nCol, var.GetVector3(), varResult); break; default: break; } return -1; }
int NFCHelloWorld2::OnPropertyCallBackEvent( const NFGUID& self, const std::string& strProperty, const NFData& oldVar, const NFData& newVar) { std::cout << "OnPropertyCallBackEvent Property: " << strProperty << " OldValue: " << oldVar.GetInt() << " NewValue: " << newVar.GetInt() << std::endl; return 0; }
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; }
NFDATA_TYPE NFCClassModule::ComputerType(const char* pstrTypeName, NFData& var) { if (0 == strcmp(pstrTypeName, "int")) { var.SetInt(NULL_INT); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "string")) { var.SetString(NULL_STR); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "float")) { var.SetFloat(NULL_FLOAT); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "object")) { var.SetObject(NULL_OBJECT); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "vector2")) { var.SetVector2(NULL_VECTOR2); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "vector3")) { var.SetVector3(NULL_VECTOR3); return var.GetType(); } return TDATA_UNKNOWN; }