BOOL DBPrivateInfo::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_PrivateInfo, }; //INT Result; //if(!Delete()) // return FALSE; //ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); //保存私人数据 do { CHAR PrivateInfo[1024]; memset(PrivateInfo,0,1024); Binary2String((CHAR*)(&pCharFullData->m_PrivateInfo), sizeof(_PRIVATE_INFO_DB_LOAD), PrivateInfo); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(UpdateCharPrivateInfo, CHAR_TABLE, PrivateInfo, m_CharGuid, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBCharVisualGem::Save(VOID* pSource) { __ENTER_FUNCTION FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); //保存CharVisualGem数据 do { CHAR VisualGemInfo[2048]; memset(VisualGemInfo,0,2048); //获取所有装备的物品显示信息 DB_CHAR_EQUIP_LIST eqlist; for(INT i = 0; i < HEQUIP_NUMBER; ++i) { _ITEM* pItem = pCharFullData->GetItem(i+DB_EQUIP_POS_START); if(pItem->IsNullType()) continue; eqlist.m_Equip[i] = pItem->m_ItemIndex; //eqlist.m_EquipVisual[i] = pItem->GetEquipData()->m_Visual; //eqlist.m_EquipGemID[i] = pItem->GetEquipmentMaxLevelGemID(); } Binary2String((CHAR*)(&eqlist), sizeof(DB_CHAR_EQUIP_LIST), VisualGemInfo); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(UpdateCharVisualGem, CHAR_TABLE, VisualGemInfo, m_CharGuid, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBTitleInfo::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_TitleInfo, }; //INT Result; //if(!Delete()) // return FALSE; //ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); //保存Title数据 do { CHAR TitleInfo[2048*2]; memset(TitleInfo,0,2048*2); Binary2String((CHAR*)(&pCharFullData->m_Human.m_Titles), sizeof(_TITLE), TitleInfo); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(UpdateCharTitleInfo, CHAR_TABLE, TitleInfo, m_CharGuid, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBCrcInfo::Save(VOID* pSource) { __ENTER_FUNCTION FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); //保存CRC校验数据 do { //FullData CHAR FullDataInfo[102400]; memset(FullDataInfo,0,102400); Binary2String((CHAR*)(pCharFullData), sizeof(FULLUSERDATA), FullDataInfo); //LogoutTime UINT nLogoutTime = pCharFullData->m_Human.m_LastLogoutTime; //Prepare Query LONG_DB_QUERY* pQuery = GetLongInterQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid == INVALID_ID) { return FALSE; } //Parse Query pQuery->Parse(SaveCrcInfo, CRC32_TABLE, m_CharGuid, nLogoutTime, m_Crc32, FullDataInfo, 1, m_ServerId); //Execute Query if(!ODBCBase::LongSave(pCharFullData)) return FALSE; }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBSouXiaList::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_SouXiaInfo, }; //INT Result; //if(!Delete()) // return FALSE; //ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); //保存Title数据 do { for (int i=0; i<MAX_SOUXIA_CONTAINER; ++i) { //if ( pCharFullData->m_SouXia.m_SouXiaData[i].m_CurPos >=0 // && pCharFullData->m_SouXia.m_SouXiaData[i].m_SouXiaID > 0) //{ CHAR SouXiaData[2048]; memset(SouXiaData,0,2048); Binary2String((CHAR*)(&(pCharFullData->m_SouXia.m_SouXiaData[i])), sizeof(SOUXIA_DATA), SouXiaData); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(NewCharSouXia,m_CharGuid,pCharFullData->m_SouXia.m_SouXiaData[i].m_CurPos,SouXiaData,i); if(!ODBCBase::Save(pCharFullData)) return FALSE; //} } }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBGuildExtraInfo::Save(VOID* pSource) { __ENTER_FUNCTION INT Result; enum { DB_GuildID = 1, DB_GuildExtraInfo, }; GUILD_USER_EXTRA_DATA_DB_t* pGuildExtraInfo = static_cast<GUILD_USER_EXTRA_DATA_DB_t*>(pSource); Assert(pGuildExtraInfo); //±£´æExtraInfoÊý¾Ý do { CHAR GuildExtraInfo[MAX_LONG_COLUMN_BUFFER] = {0}; Binary2String((CHAR*)(pGuildExtraInfo), sizeof(GUILD_USER_EXTRA_DATA_DB_t)*USER_ARRAY_SIZE, GuildExtraInfo); LONG_DB_QUERY* pQuery = GetLongInterQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(SaveWorldGuildExtraInfo,GUILD_TABLE,GuildExtraInfo,m_GuildID); if(!ODBCBase::LongSave(&Result)) return FALSE; }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBItemList::Save(VOID* pSource) { __ENTER_FUNCTION INT Result; Delete(); ParseResult(&Result); enum { DB_CharGuid = 1, DB_ItemWorld, DB_ItemServer, DB_ItemGuid, DB_ItemType, DB_ItemPos, DB_FixAttr, //也可以去掉,但是Login 需要读装备表 DB_P1, DB_P2, DB_P3, DB_P4, DB_P5, DB_P6, DB_P7, DB_P8, DB_P9, DB_P10, DB_P11, DB_P12, DB_P13, DB_P14, }; FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); for(INT ItemPos =0;ItemPos<=DB_BANK_POS_END;ItemPos++) { if( ItemPos >= DB_BAG_POS_START && ItemPos < (DB_BAG_POS_START+MAX_BAG_SIZE) ) { //背包 } else if( ItemPos >= DB_EQUIP_POS_START && ItemPos < (DB_EQUIP_POS_START+HEQUIP_NUMBER) ) { //装备 } else if( ItemPos >= DB_BANK_POS_START && ItemPos < (DB_BANK_POS_START+MAX_BANK_SIZE) ) { //银行 } else { continue; } _ITEM* pItem = pCharFullData->GetItem(ItemPos); if(pItem->IsNullType()) continue; DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } CHAR FixAttr[MAX_FIX_ATTR_LENGTH]; CHAR FixAttrOut[MAX_FIX_ATTR_LENGTH]; memset(FixAttrOut,0,MAX_FIX_ATTR_LENGTH); INT OutLength; pItem->ReadFixAttr(FixAttr,OutLength,MAX_FIX_ATTR_LENGTH); Binary2String(FixAttr,OutLength,FixAttrOut); INT PArray[14] = {0}; pItem->ReadVarAttr((CHAR*)PArray,OutLength,sizeof(INT)*(DB_P14-DB_P1+1)); CHAR VarAttr[256] = {0}; Binary2String((CHAR*)(pItem->m_Param),sizeof(INT)*MAX_ITEM_PARAM,VarAttr); UINT dbVersion = CalcCRC((CHAR*)PArray); pQuery->Parse(NewCharItem, // ITEM_TABLE, m_CharGuid, //charguid pItem->m_ItemGUID.m_Serial, pItem->m_ItemGUID.m_World, pItem->m_ItemGUID.m_Server, pItem->m_ItemIndex, ItemPos, FixAttrOut, PArray[0], PArray[1], PArray[2], PArray[3], PArray[4], PArray[5], PArray[6], PArray[7], PArray[8], PArray[9], PArray[10], PArray[11], PArray[12], PArray[13], 1, dbVersion, pItem->m_Creator, VarAttr); if(!ODBCBase::Save(pCharFullData)) return FALSE; } return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBAbilityList::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_ABID, DB_ABLvl, DB_ABExp, }; INT Result; Delete(); ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); for(INT i = 0;i < MAX_CHAR_ABILITY_NUM;i++) { if(pCharFullData->m_Ability.m_aABility[i].m_Level<=0) continue; DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } pQuery->Parse(NewCharAbility, ABILITY_TABLE, m_CharGuid, i, pCharFullData->m_Ability.m_aABility[i].m_Level, pCharFullData->m_Ability.m_aABility[i].m_Exp, m_DBVersion ); if(!ODBCBase::Save(pCharFullData)) return FALSE; } do { CHAR Pres[1024] = {0}; Binary2String((CHAR*)(pCharFullData->m_Ability.m_aPrescr), sizeof(CHAR)*MAX_CHAR_PRESCRIPTION_BYTE, Pres); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } pQuery->Parse(UpdateCharPresList, CHAR_TABLE, Pres, m_CharGuid, m_DBVersion ); if(!ODBCBase::Save(pCharFullData)) return FALSE; } while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBRelationList::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_FGuid, DB_FName, DB_FPoint, DB_ReFlag, DB_GroupID, DB_ExtData, }; INT Result; if(!Delete()) return FALSE; ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); for(INT i =0;i<MAX_RELATION_SIZE;i++) { DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } if(pCharFullData->m_Relation.m_aRelation[i].m_Member.m_MemberGUID==INVALID_ID) continue; CHAR MemberExtData[200]; memset(MemberExtData,0,200); RELATION_MEMBER::ReMember_ExtData ExtData = pCharFullData->m_Relation.m_aRelation[i].m_Member.GetExtData(); Binary2String((CHAR*)&ExtData,sizeof(ExtData),MemberExtData); pQuery->Parse(NewCharRelation, RELATION_TABLE, m_CharGuid, pCharFullData->m_Relation.m_aRelation[i].m_Member.m_MemberGUID, pCharFullData->m_Relation.m_aRelation[i].m_Member.m_szMemberName, pCharFullData->m_Relation.m_aRelation[i].m_FriendPoint, pCharFullData->m_Relation.m_aRelation[i].m_Type, pCharFullData->m_Relation.m_aRelation[i].m_Group, MemberExtData, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; } //保存关系数据 do { CHAR CharRelationData[sizeof(_RELATION_DB_LOAD::RelationData) * 2 + 1]; memset(CharRelationData,0, sizeof(CharRelationData)); _RELATION_DB_LOAD::RelationData ReData = pCharFullData->m_Relation.GetRelationData(); Binary2String((CHAR*)(&ReData),sizeof(ReData),CharRelationData); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(UpdateCharRelationData, CHAR_TABLE, CharRelationData, m_CharGuid, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBPetItemInfo::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_PetPairData = 1, }; INT Result; SMUPool<PetProcreateItemSM>* pPoolPtr = static_cast<SMUPool<PetProcreateItemSM>*>(pSource); Assert(pPoolPtr); PetProcreateItem PetProItem; do { INT SmuCount = pPoolPtr->GetPoolMaxSize(); if(SmuCount>MAX_PET_PROCREATE_ITEM_NUM) Assert(FALSE); INT UseStats; for(INT i = 0 ;i<SmuCount;i++) { PetProcreateItemSM* pSMU = pPoolPtr->GetPoolObj(i); if(!pSMU) { Assert(pSMU); return FALSE; } UseStats =pSMU->GetUseStatus(SM_C_READ); pSMU->Lock(SM_C_READ); PetProcreateItem* pPetItem = &pSMU->m_PetProcreateItem; Assert(pPetItem); if(pPetItem == NULL) { pSMU->UnLock(SM_C_READ); Assert(FALSE); } if(pPetItem->IsInvalid() == TRUE && UseStats != PET_DELETE) { pSMU->UnLock(SM_C_READ); continue; } memcpy(&PetProItem,pPetItem,sizeof(PetProcreateItem)); pSMU->m_SMUHead.UseStatus = PET_SAVED; pSMU->UnLock(SM_C_READ); //继续存储 mInterface->Clear(); CheckDBConnect("DBPetItemInfo"); LONG_DB_QUERY* pQuery = GetLongInterQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); CHAR PairDataList[20480] = {0}; Binary2String(((CHAR*)pPetItem),sizeof(PetProcreateItem), PairDataList); pQuery->Parse(SavePetItemInfo, PairDataList, i, ((UseStats!=PET_DELETE)?1:0)); ODBCBase::LongSave(&Result); //保存数据版本 pQuery->Clear(); pQuery->Parse(SavePetItemDataVersion,PETITEM_TABLE,PETPROCREATE_CURRENT_ITEM_VERSION,i); ODBCBase::LongSave(&Result); } }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBCharFullData::Save(VOID* pSource) { __ENTER_FUNCTION DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); if(!StrSafeCheck(pCharFullData->m_Human.m_Title,MAX_CHARACTER_TITLE)) return FALSE; if(!StrSafeCheck(pCharFullData->m_Human.m_Passwd,MAX_PWD)) return FALSE; CHAR CharCamp[100]; memset(CharCamp,0,100); Binary2String((CHAR*)(&pCharFullData->m_Human.m_CampData), sizeof(_CAMP_DATA), CharCamp); CHAR CharSetting[2048]; memset(CharSetting,0,2048); Binary2String((CHAR*)(&pCharFullData->m_Setting), sizeof(_SETTING_DB_LOAD), CharSetting); CHAR CharShopInfo[512]; memset(CharShopInfo,0,512); _HUMAN_DB_LOAD::_PSHOP_INFO ShopInfo; memcpy(ShopInfo.m_ShopGuid,pCharFullData->m_Human.m_ShopGuid,sizeof(_PLAYERSHOP_GUID)*MAX_SHOP_NUM_PER_PLAYER); memcpy(ShopInfo.m_FavoriteList,pCharFullData->m_Human.m_FavoriteList,sizeof(_PLAYERSHOP_GUID)*MAX_FAVORITE_SHOPS); Binary2String((CHAR*)&ShopInfo, sizeof(ShopInfo), CharShopInfo); CHAR CharCarryPet[100]; memset(CharCarryPet,0,100); Binary2String((CHAR*)&pCharFullData->m_Human.m_guidCurrentPet, sizeof(PET_GUID_t), CharCarryPet); UINT dbVersion = CalcCRC(pSource); pQuery->Parse(UpdateCharFullData, CHAR_TABLE, pCharFullData->m_Human.m_Title, pCharFullData->m_Human.m_Sex, pCharFullData->m_Human.m_Level, pCharFullData->m_Human.m_DoubleExpTime_Num, pCharFullData->m_Human.m_Exp, pCharFullData->m_Human.m_Money, pCharFullData->m_Human.m_Passwd, pCharFullData->m_Human.m_HairColor, pCharFullData->m_Human.m_FaceColor, pCharFullData->m_Human.m_HairModel, pCharFullData->m_Human.m_FaceModel, pCharFullData->m_Human.m_StartScene, Float2Int(pCharFullData->m_Human.m_Position.m_fX*100), Float2Int(pCharFullData->m_Human.m_Position.m_fZ*100), pCharFullData->m_Human.m_LastLoginTime, pCharFullData->m_Human.m_LastLogoutTime, //pCharFullData->m_Human.m_DBVersion, CharCamp, pCharFullData->m_Human.m_MenPai, pCharFullData->m_Human.m_HP, pCharFullData->m_Human.m_MP, pCharFullData->m_Human.m_StrikePoint, pCharFullData->m_Human.m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_STR], pCharFullData->m_Human.m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_SPR], pCharFullData->m_Human.m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_CON], pCharFullData->m_Human.m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_INT], pCharFullData->m_Human.m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_DEX], pCharFullData->m_Human.m_Level1Points, CharSetting, CharShopInfo, CharCarryPet, pCharFullData->m_Human.m_GuildID, pCharFullData->m_Human.m_TeamID, pCharFullData->m_Human.m_PortraitID, pCharFullData->m_Human.m_EnergyRegeneRate, pCharFullData->m_Human.m_RMBMoney, pCharFullData->m_Human.m_BankRMB, pCharFullData->m_Human.m_VigorRegeneRate, pCharFullData->m_Human.m_GmRight, pCharFullData->m_Human.m_uPwdDelTime, pCharFullData->m_Human.m_LeftDieTime, pCharFullData->m_Bank.m_Money, pCharFullData->m_Bank.m_CurEndIndex, pCharFullData->m_Human.m_BakScene, Float2Int(pCharFullData->m_Human.m_BakPosition.m_fX*100), Float2Int(pCharFullData->m_Human.m_BakPosition.m_fZ*100), pCharFullData->m_Human.m_Rage, dbVersion, m_CharGuid); if(!ODBCBase::Save(pSource)) return FALSE; Assert(mResultCount<=1); mInterface->Clear(); if(mResultCount==0) { return TRUE; } dbVersion = 0; //保存装备 DBItemList ItemListObject(mInterface); ItemListObject.SetCharGuid(m_CharGuid); ItemListObject.SetDBVersion(dbVersion); if(!ItemListObject.Save(pCharFullData)) return FALSE; ItemListObject.ParseResult(pCharFullData); //保存技能 DBSkillList SkillListObject(mInterface); SkillListObject.SetCharGuid(m_CharGuid); SkillListObject.SetDBVersion(dbVersion); if(!SkillListObject.Save(pCharFullData)) return FALSE; SkillListObject.ParseResult(pCharFullData); //保存心法 DBXinFaList XinFaListObject(mInterface); XinFaListObject.SetCharGuid(m_CharGuid); XinFaListObject.SetDBVersion(dbVersion); if(!XinFaListObject.Save(pCharFullData)) return FALSE; XinFaListObject.ParseResult(pCharFullData); //保存生活技能 DBAbilityList AbilityListObject(mInterface); AbilityListObject.SetCharGuid(m_CharGuid); AbilityListObject.SetDBVersion(dbVersion); if(!AbilityListObject.Save(pCharFullData)) return FALSE; AbilityListObject.ParseResult(pCharFullData); //保存任务信息 DBTaskList TaskListObject(mInterface); TaskListObject.SetCharGuid(m_CharGuid); TaskListObject.SetDBVersion(dbVersion); if(!TaskListObject.Save(pCharFullData)) return FALSE; TaskListObject.ParseResult(pCharFullData); //保存关系列表 DBRelationList RelationListObject(mInterface); RelationListObject.SetCharGuid(m_CharGuid); RelationListObject.SetDBVersion(dbVersion); if(!RelationListObject.Save(pCharFullData)) return FALSE; RelationListObject.ParseResult(pCharFullData); //保存Impact 列表 DBImpactList ImpactListObject(mInterface); ImpactListObject.SetCharGuid(m_CharGuid); ImpactListObject.SetDBVersion(dbVersion); if(!ImpactListObject.Save(pCharFullData)) return FALSE; ImpactListObject.ParseResult(pCharFullData); //保存宠物 列表 DBPetList PetListObject(mInterface); PetListObject.SetCharGuid(m_CharGuid); PetListObject.SetDBVersion(dbVersion); if(!PetListObject.Save(pCharFullData)) return FALSE; PetListObject.ParseResult(pCharFullData); //私人信息 DBPrivateInfo PrivateInfoObject(mInterface); PrivateInfoObject.SetCharGuid(m_CharGuid); PrivateInfoObject.SetDBVersion(dbVersion); if(!PrivateInfoObject.Save(pCharFullData)) return FALSE; PrivateInfoObject.ParseResult(pCharFullData); //称号信息 DBTitleInfo TitleInfoObject(mInterface); TitleInfoObject.SetCharGuid(m_CharGuid); TitleInfoObject.SetDBVersion(dbVersion); if(!TitleInfoObject.Save(pCharFullData)) return FALSE; TitleInfoObject.ParseResult(pCharFullData); //冷却信息 DBCoolDownInfo CoolDownInfoObject(mInterface); CoolDownInfoObject.SetCharGuid(m_CharGuid); CoolDownInfoObject.SetDBVersion(dbVersion); if(!CoolDownInfoObject.Save(pCharFullData)) return FALSE; CoolDownInfoObject.ParseResult(pCharFullData); //商店信息 //DBWebShopInfo WebShopInfo(mInterface); //WebShopInfo.SetCharGuid(m_CharGuid); //WebShopInfo.SetDBVersion(dbVersion); //WebShopInfo.SetWebShopInfoId(pCharFullData->m_PrivateInfo.pi.wsInfo[0].Id); //if(!WebShopInfo.Save(pCharFullData)) // return FALSE; //WebShopInfo.ParseResult(pCharFullData); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBGuildInfo::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_GuildID = 1, DB_GuildName, DB_Guildstat, DB_Chiefguid, DB_PCount, DB_UCount, DB_MUCount, DB_GPoint, DB_GuildMoney, DB_CityID, DB_Time, DB_Logvity, DB_Contribu, DB_Honor, DB_Indlvl, DB_Agrlvl, DB_Comlvl, DB_Deflvl, DB_Techlvl, DB_Amblvl, DB_Admin, DB_GuildDesc, DB_Chiefname, DB_Cname, DB_Glvl, }; INT Result; SMUPool<GuildSMU>* pPoolPtr = static_cast<SMUPool<GuildSMU>*>(pSource); Assert(pPoolPtr); //保存工会数据 GUILD_DB SaveGuild; do { INT SmuCount = pPoolPtr->GetPoolMaxSize(); if(SmuCount>MAX_GUILD_SIZE) Assert(FALSE); INT UseStats; for(INT i = 0 ;i<SmuCount;i++) { GuildSMU* pSMU = pPoolPtr->GetPoolObj(i); if(!pSMU) { Assert(pSMU); return FALSE; } UseStats =pSMU->GetUseStatus(SM_C_READ); pSMU->Lock(SM_C_READ); GUILD_DB* pGuild = &(pSMU->m_GuildSM); if(pGuild == NULL) { pSMU->UnLock(SM_C_READ); Assert(FALSE); } memcpy(&SaveGuild,pGuild,sizeof(GUILD_DB)); pSMU->m_SMUHead.UseStatus = GUILD_SAVED; if(UseStats ==GUILD_DELETE) { pGuild->CleanUp(); } pSMU->UnLock(SM_C_READ); if(SaveGuild.m_GuildID == INVALID_ID) continue; CHAR AdminInfo[4096] = {0}; Binary2String((CHAR*)(&SaveGuild.m_AdminLayout), sizeof(GUILD_ADMIN_t), AdminInfo); CHAR GuildUser[MAX_LONG_COLUMN_BUFFER] = {0}; Binary2String((CHAR*)(SaveGuild.m_aGuildUser), sizeof(GUILDUSER_DB)*USER_ARRAY_SIZE, GuildUser); LONG_DB_QUERY* pQuery = GetLongInterQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(SaveWorldGuildInfo, SaveGuild.m_GuildID, SaveGuild.m_GuildName, SaveGuild.m_Status, SaveGuild.m_ChieftainGUID, SaveGuild.m_nProposerCount, SaveGuild.m_UserCount, SaveGuild.m_MaxUserSize, SaveGuild.m_GuildPoint, SaveGuild.m_GuildMoney, SaveGuild.m_CityID, SaveGuild.m_nTime, SaveGuild.m_Longevity, SaveGuild.m_Contribute, SaveGuild.m_Honor, SaveGuild.m_nIndustryLevel, SaveGuild.m_nAgrLevel, SaveGuild.m_nComLevel, SaveGuild.m_nDefLevel, SaveGuild.m_nTechLevel, SaveGuild.m_nAmbiLevel, AdminInfo, SaveGuild.m_GuildDesc, SaveGuild.m_GuildChiefName, SaveGuild.m_GuildCreatorName, SaveGuild.m_GuildLevel, GuildUser, ((UseStats!=GUILD_DELETE)?1:0) ); if(!ODBCBase::LongSave(&Result)) return FALSE; } }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBImpactList::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_IMData, }; INT Result; if(!Delete()) return FALSE; ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); INT ImpactCount = pCharFullData->m_Impact.m_Count; Assert(ImpactCount<=MAX_IMPACT_NUM); for(INT i=0;i<ImpactCount;i++) { DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } CHAR ImpactData[256]; memset(ImpactData,0,256); Binary2String((CHAR*)(&pCharFullData->m_Impact.m_aImpacts[i]), sizeof(_OWN_IMPACT), ImpactData); pQuery->Parse( NewCharImpact, IMPACT_TABLE, m_CharGuid, ImpactData, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; } return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBTaskList::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_TaskID, DB_ScriptID, DB_Flag, DB_TP1, DB_TP2, DB_TP3, DB_TP4, DB_TP5, DB_TP6, DB_TP7, DB_TP8, }; INT Result; if(!Delete()) return FALSE; ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); //保存任务列表 INT MissionCount = pCharFullData->m_Mission.m_Count; for(INT i = 0;i < MissionCount;i++) { DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } pQuery->Parse(NewCharTask, TASK_TABLE, m_CharGuid, pCharFullData->m_Mission.m_aMission[i].m_idMission, pCharFullData->m_Mission.m_aMission[i].m_idScript, pCharFullData->m_Mission.m_aMission[i].m_yFlags, pCharFullData->m_Mission.m_aMission[i].m_anParam[0], pCharFullData->m_Mission.m_aMission[i].m_anParam[1], pCharFullData->m_Mission.m_aMission[i].m_anParam[2], pCharFullData->m_Mission.m_aMission[i].m_anParam[3], pCharFullData->m_Mission.m_aMission[i].m_anParam[4], pCharFullData->m_Mission.m_aMission[i].m_anParam[5], pCharFullData->m_Mission.m_aMission[i].m_anParam[6], pCharFullData->m_Mission.m_aMission[i].m_anParam[7], m_DBVersion ); if(!ODBCBase::Save(pCharFullData)) return FALSE; } //保存任务数据 do { CHAR CharMissionData[4096]; memset(CharMissionData,0,4096); Binary2String((CHAR*)(pCharFullData->m_Mission.m_aMissionData), sizeof(INT)*MAX_CHAR_MISSION_DATA_NUM, CharMissionData); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(UpdateCharTaskData, CHAR_TABLE, CharMissionData, m_CharGuid, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; }while(0); //保存任务标记 do { CHAR CharMissionFlag[2048]; memset(CharMissionFlag,0,2048); Binary2String((CHAR*)(pCharFullData->m_Mission.m_aMissionHaveDoneFlags), sizeof(UINT)*MAX_CHAR_MISSION_FLAG_LEN, CharMissionFlag); DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); pQuery->Parse(UpdateCharTaskFlag, CHAR_TABLE, CharMissionFlag, m_CharGuid, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; }while(0); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL DBPetList::Save(VOID* pSource) { __ENTER_FUNCTION enum { DB_CharGuid = 1, DB_PetGuid, DB_PetDataID, DB_PetName, DB_PetNick, DB_Level, DB_NeedLevel, DB_AttType, DB_AIType, DB_Camp, DB_HP, DB_MP, DB_Life, DB_PetType, DB_Genera, DB_Enjoy, DB_StrPer, DB_ConPer, DB_DexPer, DB_SprPer, DB_IprPer, DB_Gengu, DB_GrowRate, DB_RePoint, DB_Exp, DB_Str, DB_Con, DB_Dex, DB_Spr, DB_Ipr, DB_Skill }; INT Result; Delete(); ParseResult(&Result); FULLUSERDATA* pCharFullData = static_cast<FULLUSERDATA*>(pSource); Assert(pCharFullData); for(INT i = 0;i <HUMAN_PET_MAX_COUNT;i++) { if(pCharFullData->m_PetList.m_aPetDB[i].m_GUID.IsNull() == TRUE) continue; DB_QUERY* pQuery = GetInternalQuery(); if(!pQuery) { Assert(FALSE); } pQuery->Clear(); if(m_CharGuid==INVALID_ID) { return FALSE; } CHAR PetSkill[100]; memset(PetSkill,0,100); Binary2String((CHAR*)(pCharFullData->m_PetList.m_aPetDB[i].m_SkillList), sizeof(_PET_SKILL)*PET_MAX_SKILL_COUNT, PetSkill); CHAR PetCamp[100]; memset(PetCamp,0,100); Binary2String((CHAR*)(&pCharFullData->m_PetList.m_aPetDB[i].m_CampData), sizeof(_CAMP_DATA), PetCamp); if(!StrSafeCheck(pCharFullData->m_PetList.m_aPetDB[i].m_szName,MAX_CHARACTER_NAME)) return FALSE; if(!StrSafeCheck(pCharFullData->m_PetList.m_aPetDB[i].m_szNick,MAX_NICK_NAME)) return FALSE; pQuery->Parse(NewCharPet, PET_TABLE, m_CharGuid, pCharFullData->m_PetList.m_aPetDB[i].m_GUID.GetHighSection(), pCharFullData->m_PetList.m_aPetDB[i].m_GUID.GetLowSection(), pCharFullData->m_PetList.m_aPetDB[i].m_nDataID, pCharFullData->m_PetList.m_aPetDB[i].m_szName, pCharFullData->m_PetList.m_aPetDB[i].m_szNick, pCharFullData->m_PetList.m_aPetDB[i].m_nLevel, pCharFullData->m_PetList.m_aPetDB[i].m_nTakeLevel, pCharFullData->m_PetList.m_aPetDB[i].m_nAttackType, pCharFullData->m_PetList.m_aPetDB[i].m_AIType, PetCamp, pCharFullData->m_PetList.m_aPetDB[i].m_nHP, 0, pCharFullData->m_PetList.m_aPetDB[i].m_nLife, pCharFullData->m_PetList.m_aPetDB[i].m_byPetType, pCharFullData->m_PetList.m_aPetDB[i].m_byGeneration, pCharFullData->m_PetList.m_aPetDB[i].m_byHappiness, pCharFullData->m_PetList.m_aPetDB[i].m_nStrPerception , pCharFullData->m_PetList.m_aPetDB[i].m_nConPerception , pCharFullData->m_PetList.m_aPetDB[i].m_nDexPerception , pCharFullData->m_PetList.m_aPetDB[i].m_nSprPerception , pCharFullData->m_PetList.m_aPetDB[i].m_nIntPerception , pCharFullData->m_PetList.m_aPetDB[i].m_nGenGu, Float2Int(pCharFullData->m_PetList.m_aPetDB[i].m_fGrowRate*1000), pCharFullData->m_PetList.m_aPetDB[i].m_nRemainPoint, pCharFullData->m_PetList.m_aPetDB[i].m_nExp, pCharFullData->m_PetList.m_aPetDB[i].m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_STR], pCharFullData->m_PetList.m_aPetDB[i].m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_CON], pCharFullData->m_PetList.m_aPetDB[i].m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_DEX], pCharFullData->m_PetList.m_aPetDB[i].m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_SPR], pCharFullData->m_PetList.m_aPetDB[i].m_BaseAttrLevel1.m_pAttr[CATTR_LEVEL1_INT], PetSkill, m_DBVersion); if(!ODBCBase::Save(pCharFullData)) return FALSE; } return TRUE; __LEAVE_FUNCTION return FALSE; }