int NFCLoginLogicModule::OnLoginEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (3 != var.GetCount() || !var.TypeEx(TDATA_TYPE::TDATA_OBJECT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return -1; } ////////////////////////////////////////////////////////////////////////// const NFIDENTID xIdent = var.Object(0); const std::string& strAccount = var.String(1); const std::string& strPassword = var.String(2); int64_t nState = -1; std::vector<std::string> xFieldVec; std::vector<std::string> xValueVec; xFieldVec.push_back("Password"); if (m_pClusterSqlModule->Query("AccountInfo", strAccount, xFieldVec, xValueVec) && xFieldVec.size() == xValueVec.size() && strPassword == xValueVec[0]) { //µÇ¼³É¹¦ nState = 0; } NFCDataList valEventInfo; valEventInfo << nState << xIdent << strAccount; m_pEventProcessModule->DoEvent(NFIDENTID(), NFED_ON_CLIENT_LOGIN_RESULTS, valEventInfo); return 0; }
int NFCLoginNet_ServerModule::OnSelectWorldResultsEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (7 != var.GetCount() || !var.TypeEx(TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_OBJECT, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return -1; } const int nWorldID = var.Int(0); const NFIDENTID xClientIdent = var.Object(1); const int nLoginID = var.Int(2); const std::string& strAccount = var.String(3); const std::string& strWorldAddress = var.String(4); int nPort = var.Int(5); const std::string& strWorldKey = var.String(6); NF_SHARE_PTR<int> xFD = mxClientIdent.GetElement(xClientIdent); if (xFD) { NFMsg::AckConnectWorldResult xMsg; xMsg.set_world_id(nWorldID); xMsg.mutable_sender()->CopyFrom(NFToPB(xClientIdent)); xMsg.set_login_id(nLoginID); xMsg.set_account(strAccount); xMsg.set_world_ip(strWorldAddress); xMsg.set_world_port(nPort); xMsg.set_world_key(strWorldKey); SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_CONNECT_WORLD, xMsg, *xFD); } return 0; }
int NFCWorldToMasterModule::OnSelectServerResultsEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (var.GetCount() != 7 || !var.TypeEx(TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_OBJECT, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return 0; } const int nWorldID = var.Int(0); const NFIDENTID xClientIdent = var.Object(1); const int nLoginID = var.Int(2); const std::string& strAccount = var.String(3); const std::string& strWorldAddress = var.String(4); const int nPort = var.Int(5); const std::string& strKey = var.String(6); NFMsg::AckConnectWorldResult xMsg; xMsg.set_world_id(nWorldID); xMsg.set_login_id(nLoginID); xMsg.set_world_port(nPort); xMsg.mutable_sender()->CopyFrom(NFINetModule::NFToPB(xClientIdent)); xMsg.set_account(strAccount); xMsg.set_world_ip(strWorldAddress); xMsg.set_world_key(strKey); SendSuitByPB(NFMsg::EGMI_ACK_CONNECT_WORLD, xMsg); return 0; }
int HelloWorld3Module::OnEvent(const NFIDENTID& self, const int event, const NFIDataList& arg) { //事件回调函数 std::cout << "OnEvent EventID: " << event << " self: " << self.nData64 << " argList: " << arg.Int(0) << " " << " " << arg.String(1) << std::endl; m_pKernelModule->SetPropertyInt(self, "Hello", arg.Int(0)); m_pKernelModule->SetPropertyString(self, "Hello", arg.String(1)); return 0; }
int NFCGameScene::OnPlayerChatEvent(const int nEventID, const NFIDataList& varDataList) { const NFGUID &self = varDataList.Object(0); Sprite *pPlayer = m_Players.GetElement(self); auto pChat = ui::Text::create(varDataList.String(3), "", 16); pChat->setAnchorPoint(Vec2(0.5, 0)); pChat->setPosition(Vec2(pPlayer->getAnchorPointInPoints().x, pPlayer->getContentSize().height+ pChat->getContentSize().height)); pPlayer->addChild(pChat); pChat->runAction(Sequence::create(FadeIn::create(0.5), DelayTime::create(5.0f), FadeIn::create(0.5), RemoveSelf::create(), NULL)); pChat->runAction(MoveBy::create(0.5, Vec2(0, pChat->getContentSize().height))); return 0; }
int NFCLoginNet_ServerModule::OnLoginResultsEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (3 != var.GetCount() || !var.TypeEx(TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_OBJECT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return -1; } const int nState = var.Int(0); const NFIDENTID xIdent = var.Object(1); const std::string& strAccount = var.String(2); NF_SHARE_PTR<int> xFD = mxClientIdent.GetElement(xIdent); if (xFD) { if (0 != nState) { //此帐号密码错误或者被封号 //登录失败 NFMsg::AckEventResult xMsg; xMsg.set_event_code(NFMsg::EGEC_ACCOUNTPWD_INVALID); SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_LOGIN, xMsg, *xFD); return 0; } NetObject* pNetObject = GetNet()->GetNetObject(*xFD); if (pNetObject) { //记录他登录过 pNetObject->SetConnectKeyState(1); pNetObject->SetAccount(strAccount); } //把服务器列表广播下去 NFMsg::AckEventResult xData; xData.set_event_code(NFMsg::EGEC_ACCOUNT_SUCCESS); SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_LOGIN, xData, *xFD); //SynWorldToClient(unAddress); m_pLogModule->LogNormal(NFILogModule::NLL_INFO_NORMAL, NFIDENTID(0, *xFD), "Login successed :", strAccount.c_str()); } return 0; }
int NFCWorldNet_ServerModule::OnSelectServerEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (4 != var.GetCount() || !var.TypeEx(TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return 0; } const int nWorldID = var.Int(0); const int nSenderAddress = var.Int(1); const int nLoginID = var.Int(2); const std::string& strAccount = var.String(3); ////////////////////////////////////////////////////////////////////////// if (InThisWorld(strAccount)) { return 0; } NF_SHARE_PTR<ServerData> pServerData = mProxyMap.First(); if (pServerData.get()) { NFMsg::AckConnectWorldResult xData; xData.set_world_id(nWorldID); xData.set_sender_ip(nSenderAddress); xData.set_login_id(nLoginID); xData.set_account(strAccount); xData.set_world_ip(pServerData->pData->server_ip()); xData.set_world_port(pServerData->pData->server_port()); xData.set_world_key(strAccount); SendMsgPB(NFMsg::EGMI_ACK_CONNECT_WORLD, xData, pServerData->nFD); //结果 NFCDataList varResult; varResult << nWorldID << nSenderAddress << nLoginID << strAccount << pServerData->pData->server_ip() << pServerData->pData->server_port() << strAccount; m_pEventProcessModule->DoEvent(NFIDENTID(), NFED_ON_CLIENT_SELECT_SERVER_RESULTS, varResult); } return 0; }
int NFCItemModule::OnRequireUseItemEvent( const NFGUID& self, const int nEventID, const NFIDataList& var ) { if (var.GetCount() != 2 || !var.TypeEx(TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return 0; } //EGameErrorCode errorCode = EGameErrorCode::EGEC_INVALID_ITEM; const std::string& strItemID = var.String(0); const NFGUID xTargetID = var.Object(0); if(!m_pElementInfoModule->ExistElement(strItemID) || !m_pKernelModule->GetObject(xTargetID)) { return 0; } NF_SHARE_PTR<NFIRecord> pRecordPack = m_pKernelModule->FindRecord(self, NFrame::Player::R_BagItemList()); if (nullptr != pRecordPack) { // const bool bRet = m_pPackModule->DeleteItem(self, strItemID, 1); // if (bRet) // { // int nItemType = m_pElementInfoModule->GetPropertyInt(strItemID, "ItemType"); // NFIItemConsumeProcessModule* pConsumeProcessModule = m_pItemConsumeManagerModule->GetConsumeModule(nItemType); // if (pConsumeProcessModule) // { // if (pConsumeProcessModule->ConsumeLegal(self, strItemID, xTargetID) > 0) // { // pConsumeProcessModule->ConsumeProcess(self, strItemID, xTargetID); // // return 0; // } // } // } } return 0; }
int NFCRecord::FindRowByColValue(const int nCol, const NFIDataList& var, NFIDataList& varResult) { if (!ValidCol(nCol)) { return -1; } TDATA_TYPE eType = var.Type(0); if (eType != mVarRecordType->Type(nCol)) { return -1; } switch (eType) { case TDATA_INT: return FindInt(nCol, var.Int(nCol), varResult); break; case TDATA_FLOAT: return FindFloat(nCol, var.Float(nCol), varResult); break; case TDATA_STRING: return FindString(nCol, var.String(nCol).c_str(), varResult); break; case TDATA_OBJECT: return FindObject(nCol, var.Object(nCol), varResult); break; default: break; } return -1; }
int HelloWorld3Module::OnPropertyStrCallBackEvent( const NFIDENTID& self, const std::string& strProperty, const NFIDataList& oldVarList, const NFIDataList& newVarList) { //属性回调事件,只要属性值内容有变化,就会被回调 std::cout << "OnPropertyCallBackEvent Property: " << strProperty << " OldValue: " << oldVarList.String(0) << " NewValue: " << newVarList.String(0) << std::endl; return 0; }
int NFCSkillModule::OnUseSkill(const NFGUID& self, const NFIDataList& var) { if ( var.GetCount() != 2) { return 1; } const std::string& strSkillID = var.String( 0 ); const NFGUID& nTargetID = var.Object(1); NF_SHARE_PTR<NFIObject> pObejct = m_pKernelModule->GetObject(self); if ( pObejct == NULL ) { return 1; } //NF_SHARE_PTR<NFIRecord> pRecordSkill = pObejct->GetRecordManager()->GetElement( mstrSkillTableName ); //if ( pRecordSkill == NULL ) //{ // return 1; //} //NF_SHARE_PTR<NFIPropertyManager> pPropertyManager = m_pElementInfoModule->GetPropertyManager( var.String( 2 ) ); //if ( pPropertyManager == NULL ) //{ // return 1; //} //NF_SHARE_PTR<NFIProperty> pItemTypeProperty = pPropertyManager->GetElement( "SkillType" ); //if ( pItemTypeProperty == NULL ) //{ // return 1; //} //配置表中真的有这么个技能类别 //EGameSkillType eItemType = ( EGameSkillType )pItemTypeProperty->GetInt(); if (!m_pElementInfoModule->ExistElement(strSkillID)) { return 1; } //NFISkillConsumeProcessModule* pConsumeProcessModule = m_pSkillConsumeManagerModule->GetConsumeModule( EGameSkillType::EGST_JOBSKILL_BRIEF ); //if ( pConsumeProcessModule == NULL ) //{ // return 1; //} //NFCDataList damageValueList; //NFCDataList damageResultList; //int nResult = pConsumeProcessModule->ConsumeProcess( var.Object( 0 ), var.String( 2 ), valueOther, damageValueList, damageResultList ); //for (int i = 0; i < valueOther.GetCount(); i++) //{ // m_pKernelModule->SetPropertyInt(valueOther.Object(i), "HP", 0); // damageValueList.AddInt(0); // damageResultList.AddInt(0); //} int nCurHP = m_pKernelModule->GetPropertyInt(nTargetID, NFrame::NPC::HP()); if (nCurHP <= 0) { return 1; } m_pKernelModule->SetPropertyObject(nTargetID, NFrame::NPC::LastAttacker(), self); m_pKernelModule->SetPropertyInt(nTargetID, NFrame::NPC::HP(), (nCurHP - 10) >= 0 ? (nCurHP - 10) : 0); // 暂时扣10点血 ////结果事件--无论失败或者是成功,都会发下去--当然使用结果只对使用者下发--成果的结果,还得对被施放的人发 //if ( damageValueList.GetCount() == damageResultList.GetCount() // && damageValueList.GetCount() == valueOther.GetCount() ) //{ // NFCDataList valueResult; // valueResult.AddString( var.String( 2 ).c_str() ); // valueResult.AddInt( valueOther.GetCount() ); // valueResult.Append( valueOther, 0, valueOther.GetCount() ); //伤害对象 // valueResult.Append( damageValueList, 0, damageValueList.GetCount() ); //伤害值 // valueResult.Append( damageResultList, 0, damageResultList.GetCount() ); //击打效果 // //现在不需要反馈,杀了就杀了 // //m_pEventProcessModule->DoEvent( pObejct->Self(), NFED_ON_CLIENT_USE_SKILL_RESULT, valueResult ); //} return 0; }
int NFCSkillModule::OnRequireUseSkillEvent( const NFGUID& self, const int nEventID, const NFIDataList& var ) { if ( var.GetCount() < 3) { return 1; } //EGameErrorCode errorCode = EGameErrorCode::EGEC_INVALID_SKILL; NF_SHARE_PTR<NFIObject> pObejct = m_pKernelModule->GetObject( var.Object( 0 ) ); if ( pObejct == NULL ) { return 1; } NF_SHARE_PTR<NFIRecord> pRecordSkill = pObejct->GetRecordManager()->GetElement( NFrame::Player::R_SkillTable() ); if ( pRecordSkill == NULL ) { return 1; } NF_SHARE_PTR<NFIPropertyManager> pPropertyManager = m_pElementInfoModule->GetPropertyManager( var.String( 2 ) ); if ( pPropertyManager == NULL ) { return 1; } NF_SHARE_PTR<NFIProperty> pItemTypeProperty = pPropertyManager->GetElement(NFrame::Skill::SkillType()); if ( pItemTypeProperty == NULL ) { return 1; } //配置表中真的有这么个技能类别 EGameSkillType eItemType = ( EGameSkillType )pItemTypeProperty->GetInt(); NFISkillConsumeProcessModule* pConsumeProcessModule = m_pSkillConsumeManagerModule->GetConsumeModule( EGameSkillType::EGST_JOBSKILL_BRIEF ); if ( pConsumeProcessModule == NULL ) { return 1; } NFCDataList valueOther; valueOther.Append( var, 3, var.GetCount() - 3 ); // 被攻击玩家数量 3表示从第几个参数开始是被攻击玩家 // if ( pConsumeProcessModule->ConsumeLegal( var.ObjectVal( 0 ), var.StringVal( 2 ), valueOther ) != 0 ) // { // return 1; // } // // if ( pConsumeProcessModule->ConsumeSelf( var.ObjectVal( 0 ), var.StringVal( 2 ) ) != 0 ) // { // return 1; // } // NFCDataList damageValueList; NFCDataList damageResultList; int nResult = pConsumeProcessModule->ConsumeProcess( var.Object( 0 ), var.String( 2 ), valueOther, damageValueList, damageResultList ); for (int i = 0; i < valueOther.GetCount(); i++) { m_pKernelModule->SetPropertyInt(valueOther.Object(i), NFrame::NPC::HP(), 0); damageValueList.AddInt(0); damageResultList.AddInt(0); } //结果事件--无论失败或者是成功,都会发下去--当然使用结果只对使用者下发--成果的结果,还得对被施放的人发 if ( damageValueList.GetCount() == damageResultList.GetCount() && damageValueList.GetCount() == valueOther.GetCount() ) { NFCDataList valueResult; valueResult.AddString( var.String( 2 ).c_str() ); valueResult.AddInt( valueOther.GetCount() ); valueResult.Append( valueOther, 0, valueOther.GetCount() ); //伤害对象 valueResult.Append( damageValueList, 0, damageValueList.GetCount() ); //伤害值 valueResult.Append( damageResultList, 0, damageResultList.GetCount() ); //击打效果 //现在不需要反馈,杀了就杀了 //m_pEventProcessModule->DoEvent( pObejct->Self(), NFED_ON_CLIENT_USE_SKILL_RESULT, valueResult ); } return 0; }
bool NFCEventProcessModule::DoEvent(const NFIDENTID& objectID, const int nEventID, const NFIDataList& valueList, const bool bSync) { if (bSync) { NF_SHARE_PTR<NFCObjectEventInfo> pObjectEventInfo = mObjectEventInfoMapEx.GetElement(objectID); if (nullptr == pObjectEventInfo) { return false; } NF_SHARE_PTR<NFEventList> pEventInfo = pObjectEventInfo->GetElement(nEventID); if (nullptr == pEventInfo) { return false; } EVENT_PROCESS_FUNCTOR_PTR cb; bool bRet = pEventInfo->First(cb); while (bRet) { cb.get()->operator()(objectID, nEventID, valueList); bRet = pEventInfo->Next(cb); } } else { NF_SHARE_PTR<NFCObjectAsyncEventInfo> pObjectEventInfo = mObjectSyncEventInfoMapEx.GetElement(objectID); if (nullptr == pObjectEventInfo) { return false; } NF_SHARE_PTR<NFAsyncEventFunc> pEventInfo = pObjectEventInfo->GetElement(nEventID); if (nullptr == pEventInfo) { return false; } pPluginManager->GetActorManager()->SendMsgToActor(pEventInfo->nActorID, objectID, nEventID, valueList.String(0), pEventInfo); } return true; }