bool NFCWorldGuildDataModule::SearchGuild( const NFIDENTID& self, const std::string& strName, std::vector<SearchGuildObject>& xList ) { std::vector<std::string> vValueName; if (!m_pClusterSQLModule->Keys(mstrGuildNameTalble, strName, vValueName)) { return false; } for (int i = 0; i < vValueName.size(); ++i) { const std::string& strGuildName = vValueName[i]; std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; vFieldVec.push_back("GuildID"); if (!m_pClusterSQLModule->Query(mstrGuildNameTalble, strGuildName, vFieldVec, vValueVec)) { continue; } NFIDENTID xGuild ; xGuild.FromString(vValueVec[0]); SearchGuildObject xGuildInfo; if (GetGuildInfo(self, xGuild, xGuildInfo)) { xList.push_back(xGuildInfo); } } return true; }
const NFIDENTID NFCWorldGuildDataModule::CreateGuild(const NFIDENTID& xPlayeID, const std::string& strName, const std::string& strRoleName, const int nLevel, const int nJob , const int nDonation , const int nVIP, const int nOffLine /*= 1*/, const int nPower/* = NFMsg::GUILD_POWER_TYPE_PRESIDENT*/) { bool bExit = false; if (!m_pClusterSQLModule->Exists(mstrGuildNameTalble, strName, bExit)) { return NFIDENTID(); } if (bExit) { return NFIDENTID(); } const NFIDENTID xGuidID = m_pUUIDModule->CreateGUID(); //Guild std::vector<std::string> vGuildFieldVec; std::vector<std::string> vGuildValueVec; vGuildFieldVec.push_back("Name"); vGuildValueVec.push_back(strName); vGuildFieldVec.push_back("GuildLevel"); vGuildValueVec.push_back("1"); vGuildFieldVec.push_back("PresidentID"); vGuildValueVec.push_back(xPlayeID.ToString()); vGuildFieldVec.push_back("PresidentName"); vGuildValueVec.push_back(strRoleName); vGuildFieldVec.push_back("GuildMemeberMaxCount"); vGuildValueVec.push_back("200"); if (!m_pClusterSQLModule->Updata(mstrGuildTalble, xGuidID.ToString(), vGuildFieldVec, vGuildValueVec)) { return NFIDENTID(); } //Name std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; vFieldVec.push_back("GuildID"); vValueVec.push_back(xGuidID.ToString()); m_pClusterSQLModule->Updata(mstrGuildNameTalble, strName, vFieldVec, vValueVec); return xGuidID; }
bool NFCWorldGuildDataModule::GetPlayerGuild( const NFIDENTID& self, NFIDENTID& xGuild ) { std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; vFieldVec.push_back("GuildID"); if (!m_pClusterSQLModule->Query("Player", self.ToString(), vFieldVec, vValueVec)) { return false; } const std::string& strGuildID = vValueVec[0]; return xGuild.FromString(strGuildID); }
bool NFCProperty::FromString( const std::string& strData ) { const TDATA_TYPE eType = GetType(); bool bRet = false; switch (eType) { case TDATA_INT: { NFINT64 nValue = 0; bRet = NF_StrTo(strData, nValue); SetInt(nValue); } break; case TDATA_FLOAT: { float fValue = 0; bRet = NF_StrTo(strData, fValue); SetFloat(fValue); } break; case TDATA_DOUBLE: { double dValue = 0; bRet = NF_StrTo(strData, dValue); SetDouble(dValue); } break; case TDATA_STRING: { SetString(strData); bRet = true; } break; case TDATA_OBJECT: { NFIDENTID xID; bRet = xID.FromString(strData); SetObject(xID); } break; default: break; } return bRet; }
int NFCNPCRefreshModule::OnObjectHPEvent( const NFIDENTID& self, const std::string& strPropertyName, const NFIDataList& oldVar, const NFIDataList& newVar) { if ( newVar.Int( 0 ) <= 0 ) { NFIDENTID identAttacker = m_pKernelModule->GetPropertyObject( self, "LastAttacker" ); if (!identAttacker.IsNull()) { m_pEventProcessModule->DoEvent( self, NFED_ON_OBJECT_BE_KILLED, NFCDataList() << identAttacker ); m_pKernelModule->AddHeartBeat( self, "OnDeadDestroyHeart", this, &NFCNPCRefreshModule::OnDeadDestroyHeart, 5.0f, 1 ); } } return 0; }
bool NFCWorldGuildDataModule::GetPlayerInfo( const NFIDENTID& self, std::string& strRoleName, int& nLevel, int& nJob , int& nDonation , int& nVIP ) { nDonation = 0;//这什么字段,还没加? nVIP = 1; std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; vFieldVec.push_back("Name"); vFieldVec.push_back("Level"); vFieldVec.push_back("Job"); if (!m_pClusterSQLModule->Query( "Player", self.ToString(), vFieldVec, vValueVec)) { return false; } if (!NF_StrTo(vValueVec[0], strRoleName)) { return false; } if (!NF_StrTo(vValueVec[1], nLevel)) { return false; } if (!NF_StrTo(vValueVec[2], nJob)) { return false; } return true; }
int NFCGameServerToWorldModule::OnAckJoinGuildProcess( const NFIPacket& msg ) { NFIDENTID nPlayerID; NFMsg::ReqAckJoinGuild xData; if (!NFINetModule::RecivePB(msg, xData, nPlayerID)) { return 0; } NFIDENTID xGuild = NFINetModule::PBToNF(xData.guild_id()); if (!xGuild.IsNull()) { m_pKernelModule->SetPropertyObject(nPlayerID, "GuildID", xGuild); } m_pGameServerNet_ServerModule->SendMsgPBToGate(msg.GetMsgHead()->GetMsgID(), xData, nPlayerID); return 0; }
const bool NFCWorldGuildDataModule::DeleteGuild(const NFIDENTID& xGuild ) { NF_SHARE_PTR<NFIObject> pGuilD = m_pKernelModule->GetObject(xGuild); if (pGuilD.get()) { m_pKernelModule->DestroyObject(xGuild); } bool bExit = false; if (!m_pClusterSQLModule->Exists(mstrGuildTalble, xGuild.ToString(), bExit) || !bExit) { return false; } std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; vFieldVec.push_back("Name"); if (!m_pClusterSQLModule->Query(mstrGuildTalble, xGuild.ToString(), vFieldVec, vValueVec)) { return false; } const std::string& strGuildName = vValueVec[0]; bExit = false; if (!m_pClusterSQLModule->Exists(mstrGuildNameTalble, strGuildName, bExit) || !bExit) { return false; } if (!m_pClusterSQLModule->Delete(mstrGuildTalble, xGuild.ToString())) { return false; } return true; }
int NFCCreateRoleModule::OnAcountDisConnectEvent( const NFIDENTID& object, const int nEventID, const NFIValueList& var ) { if ( var.GetCount() == 3 ) { const char* pstrAccount = var.StringVal( 0 ); const char* pstrRoleName = var.StringVal( 1 ); NFIDENTID ident = var.ObjectVal( 2 ); if ( strlen( pstrAccount ) > 0 ) { if ( m_pGameLogicModule->GetGameID() == 1 ) { if ( !ident.IsNull() ) { m_pKernelModule->DestroyObject( ident ); } else { NFCValueList varHallObjectList; NFCValueList varHalvalueInfo; varHalvalueInfo << pstrAccount; int nHallObjectCount = m_pKernelModule->GetObjectByProperty( mnRoleHallContainer, "Account", varHalvalueInfo, varHallObjectList ); for ( int i = 0; i < varHallObjectList.GetCount(); i++ ) { NFIDENTID identHall = varHallObjectList.ObjectVal( i ); if ( ident.nSerial == m_pGameLogicModule->GetGameID() && m_pKernelModule->GetObject( identHall ) ) { m_pKernelModule->DestroyObject( identHall ); } } } } } } return 0; }
bool NFCWorldGuildDataModule::GetPlayerGameID( const NFIDENTID& self, int& nGameID ) { std::vector<std::string> xVecFeild; std::vector<std::string> xVecValue; xVecFeild.push_back("GameID"); if (!m_pClusterSQLModule->Query("Player", self.ToString(), xVecFeild, xVecValue)) { return false; } const std::string& strGameID = xVecValue[0]; if (!NF_StrTo(strGameID, nGameID)) { return false; } return true; }
bool NFCWorldGuildDataModule::GetGuildInfo( const NFIDENTID& self, const NFIDENTID& xGuild, SearchGuildObject& xGuildInfo ) { std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; vFieldVec.push_back("Name"); vFieldVec.push_back("GuilIDIcon"); vFieldVec.push_back("GuildMemeberCount"); vFieldVec.push_back("GuildMemeberMaxCount"); vFieldVec.push_back("GuildHonor"); vFieldVec.push_back("Rank"); if (!m_pClusterSQLModule->Query(mstrGuildTalble, xGuild.ToString(), vFieldVec, vValueVec)) { return false; } const std::string& strGuildName = vValueVec[0]; int nGuildIconn = 0; int nGuildMemeberCount = 0; int nGuildMemeberMaxCount = 0; int nGuildHonor = 0; int nGuildRank = 0; NF_StrTo(vValueVec[1], nGuildIconn); NF_StrTo(vValueVec[2], nGuildMemeberCount); NF_StrTo(vValueVec[3], nGuildMemeberMaxCount); NF_StrTo(vValueVec[4], nGuildHonor); NF_StrTo(vValueVec[5], nGuildRank); xGuildInfo.mxGuildID = xGuild ; xGuildInfo.mstrGuildName = strGuildName ; xGuildInfo.mnGuildIcon = nGuildIconn ; xGuildInfo.mnGuildMemberCount = nGuildMemeberCount ; xGuildInfo.mnGuildMemberMaxCount = nGuildMemeberMaxCount ; xGuildInfo.mnGuildHonor = nGuildHonor ; xGuildInfo.mnGuildRank = nGuildRank ; return true; }
int NFCBriefSkillConsumeProcessModule::ConsumeProcess( const NFIDENTID& self, const std::string& strSkillName, const NFIValueList& other, NFIValueList& damageListValue, NFIValueList& damageResultList ) { NFIPropertyManager* pPropertyManager = m_pElementInfoModule->GetPropertyManager( strSkillName ); if ( pPropertyManager == NULL ) { return 1; } // NFIProperty* pSkillDamageProperty = pPropertyManager->GetElement( "DamageProperty" ); // NFIProperty* pSkillDamageValue = pPropertyManager->GetElement( "DamageValue" ); // NFIProperty* pSkillDamageType = pPropertyManager->GetElement( "DamageType" ); // NFIProperty* pSkillDamageSubType = pPropertyManager->GetElement( "DamageSubType" ); // if ( pSkillDamageProperty == NULL || pSkillDamageValue == NULL || pSkillDamageType == NULL || pSkillDamageSubType == NULL ) // { // return 1; // } // // int nDamageType = pSkillDamageType->QueryInt(); // int nDamageSubType = pSkillDamageSubType->QueryInt(); // NFCValueList valueEffectProperty( pSkillDamageProperty->QueryString().c_str(), "," ); // NFCValueList valueEffectValue( pSkillDamageValue->QueryString().c_str(), "," ); // // if ( valueEffectProperty.GetCount() != valueEffectValue.GetCount() ) // { // return 1; // } //for ( int i = 0; i < valueEffectProperty.GetCount(); i++ ) { //先测定目标是否有此属性(其实是担心配错了) for ( int j = 0; j < other.GetCount(); j++ ) { NFIDENTID identOther = other.ObjectVal( j ); if ( identOther.IsNull() ) { continue; } NFIObject* pObject = m_pKernelModule->GetObject( identOther ); if ( pObject == NULL ) { continue; } //短刀伤害,只能是HP,MP之类的有最大上限值的属性 // std::string strCurProperty = valueEffectProperty.StringVal( i ); // std::string strMaxProperty = "MAX" + strCurProperty; // NFIProperty* pOtherCurProperty = pObject->GetPropertyManager()->GetElement( strCurProperty ); // NFIProperty* pOtherMaxProperty = pObject->GetPropertyManager()->GetElement( strMaxProperty ); // if ( pOtherCurProperty == NULL || pOtherMaxProperty == NULL ) // { // continue; // } NFIProperty* pLastProperty = pObject->GetPropertyManager()->GetElement( "LastAttacker" ); if ( pLastProperty ) { pLastProperty->SetObject( self ); } } } //m_pKernelModule->LogErrorItem(strSkillName.c_str(), ""); return 0; }
int NFCPotionItemConsumeProcessModule::ConsumeProcess( const NFIDENTID& self, const std::string& strItemName, const NFIDataList& other ) { //附加效果 NF_SHARE_PTR<NFIPropertyManager> pPropertyManager = m_pElementInfoModule->GetPropertyManager( strItemName ); if ( pPropertyManager ) { NF_SHARE_PTR<NFIProperty> pItemEffectProperty = pPropertyManager->GetElement( "EffectProperty" ); NF_SHARE_PTR<NFIProperty> pItemEffectValue = pPropertyManager->GetElement( "EffectValue" ); if ( pItemEffectProperty && pItemEffectValue ) { NFCDataList valueEffectProperty( pItemEffectProperty->GetString().c_str(), "," ); NFCDataList valueEffectValue( pItemEffectValue->GetString().c_str(), "," ); if ( valueEffectProperty.GetCount() == valueEffectValue.GetCount() ) { for ( int i = 0; i < valueEffectProperty.GetCount(); i++ ) { //先测定目标是否有此属性(其实是担心配错了) for ( int j = 0; j < other.GetCount(); j++ ) { NFIDENTID identOther = other.Object( j ); if ( !identOther.IsNull() ) { NF_SHARE_PTR<NFIObject> pObject = m_pKernelModule->GetObject( identOther ); if ( pObject ) { std::string strCurProperty = valueEffectProperty.String( i ); std::string strMaxProperty = "MAX" + strCurProperty; NF_SHARE_PTR<NFIProperty> pOtherCurProperty = pObject->GetPropertyManager()->GetElement( strCurProperty ); NF_SHARE_PTR<NFIProperty> pOtherMaxProperty = pObject->GetPropertyManager()->GetElement( strMaxProperty ); if ( pOtherCurProperty && pOtherMaxProperty ) { //药物,只能是绝对值,百分比不要了,百分比让BUFF去做 //而且,只有最大值的那种,才能使用,因此,这里只能有 HP MP CSP 3样属性 //重要的是,不能超过最大值,这几个属性那个都是整型数据 //类似最大HP之类的,不能通过药剂直接修改属性,而是通过BUFF来修改,只要是分层属性都通过BUFF修改 int nAddValue = boost::lexical_cast<int>( valueEffectValue.String( i ) ); if ( "EXP" == strCurProperty ) { m_pLevelModule->AddExp( self, nAddValue ); } else if ( "HP" == strCurProperty ) { m_pPropertyModule->AddHP( self, nAddValue ); } else if ( "MP" == strCurProperty ) { m_pPropertyModule->AddMP( self, nAddValue ); } } else { m_pLogModule->LogProperty(NFILogModule::NLL_ERROR_NORMAL, self, strCurProperty, "", __FUNCTION__, __LINE__); return 0; } } } } } return other.GetCount(); } } } m_pLogModule->LogProperty(NFILogModule::NLL_ERROR_NORMAL, self, strItemName, "", __FUNCTION__, __LINE__); return 0; }
const bool NFCObjectSaveModule::LoadDataFormNoSql( const NFIDENTID& self , const std::string& strClassName) { NF_SHARE_PTR<NFIPropertyManager> pProManager = m_pLogicClassModule->GetClassPropertyManager(strClassName); NF_SHARE_PTR<NFIRecordManager> pRecordManager = m_pLogicClassModule->GetClassRecordManager(strClassName); if (!pProManager || !pRecordManager) { return false; } std::vector<std::string> vFieldVec; std::vector<std::string> vValueVec; int nIndex = 0; std::string strName; std::map<std::string, int> xDataIndex; //witch Property Need Load NF_SHARE_PTR<NFIProperty> xProperty = pProManager->First(strName); while (xProperty) { if (xProperty->GetSave()) { vFieldVec.push_back(strName); xDataIndex.insert(std::make_pair(strName, nIndex)); nIndex ++; } strName.clear(); xProperty = pProManager->Next(strName); } //witch Record Need Load NF_SHARE_PTR<NFIRecord> xRecord = pRecordManager->First(strName); while (xRecord) { if (xRecord->GetSave()) { vFieldVec.push_back(strName); xDataIndex.insert(std::make_pair(strName, nIndex)); nIndex ++; } strName.clear(); xRecord = pRecordManager->Next(strName); } if(!m_pClusterSQLModule->Query(strClassName, self.ToString(), vFieldVec, vValueVec)) { return false; } if (vFieldVec.size() != vValueVec.size()) { return false; } NF_SHARE_PTR<NFMapEx<std::string, std::string> > pSelf = mtObjectCache.GetElement(self); if (!pSelf) { pSelf = NF_SHARE_PTR< NFMapEx<std::string, std::string> > (NF_NEW NFMapEx<std::string, std::string>()); if (!mtObjectCache.AddElement(self, pSelf)) { return false; } } for (int i = 0; i< vValueVec.size(); i++) { const std::string& strName = vFieldVec[i]; const std::string& strValue = vValueVec[i]; pSelf->AddElement(strName, NF_SHARE_PTR<std::string>(NF_NEW std::string(strValue))); } return true; }
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; }