//设置竞技度 CT_INT32 CCUserPVPInfo::SetPVPDegree(const CT_INT32 iDegree,CT_BOOL bSend) { _AUTOMUTEX(m_pMutex); G_ValueRange Degree={0}; if(!G_GetValueRange(VALUE_TYPE_PVPDEGREEMAX,&Degree)) { CCLogMeg::getSingleton().WriteError("CCUserPVPInfo::SetPVPDegree G_GetValueRange VALUE_TYPE_PVPDEGREEMAX"); return 0; } if(iDegree == -1) { m_PVPInfo.iPVPDegree=0; m_PVPInfo.cbChestStatus=CHEST_STATUS_CLOSE; } else { m_PVPInfo.iPVPDegree+=iDegree; if(Degree.fMinVal <= m_PVPInfo.iPVPDegree) { m_PVPInfo.iPVPDegree=(CT_INT32)Degree.fMinVal; m_PVPInfo.cbChestStatus=CHEST_STATUS_OPEN; } } if(bSend) { G_ValueRange vr={0}; if(!G_GetValueRange(VALUE_TYPE_PVPCHEST,&vr)) { CCLogMeg::getSingleton().WriteError("CCUserPVPInfo::GetPVPInfo G_GetValueRange VALUE_TYPE_PVPCHEST"); } CMD_G_PVPDegree PVPDegree={0}; PVPDegree.dwUserID=m_pUser->GetUserID(); PVPDegree.iPVPDegree=m_PVPInfo.iPVPDegree; PVPDegree.iDiamod=G_GetPVPChestDiamod(PVPDegree.iPVPDegree,vr.fMinVal); m_pUser->GetNetInterface()->Send(MAIN_G_PVP_EVENT,SUB_G_PVP_DEGREE,(CT_CHAR*)&PVPDegree,sizeof(PVPDegree)); //更新数据库 MSC_DB_W_PVPInfo DBPVPinfo={0}; DBPVPinfo.dwUserID=m_pUser->GetUserID(); DBPVPinfo.iFightingCount=m_PVPInfo.iFightingCount; DBPVPinfo.lRefreshTime=m_PVPInfo.lRefreshTime; DBPVPinfo.cbChestStatus=m_PVPInfo.cbChestStatus; DBPVPinfo.iPVPDegree=m_PVPInfo.iPVPDegree; DBPVPinfo.iPVPChestNum=m_PVPInfo.iPVPChestNum; CT_DWORD threadid = GAME_THREAD_DATABASE + m_pUser->GetUserID() % ((CCGameConfig&)CCConfig::getSingleton()).m_gameThreadDataBaseNum; G_SendThreadInfo(threadid,MSC_MAIN_DB_PVP_DATA,MSC_SUB_DB_R_PVP_INFO,(CT_CHAR*)&DBPVPinfo,sizeof(DBPVPinfo)); } return m_PVPInfo.iPVPDegree; }
//获取竞技场信息 CT_BOOL CCUserPVPInfo::GetPVPInfo(CT_CHAR *pBuf,CT_INT32 &iLen) { _AUTOMUTEX(m_pMutex); if(iLen < sizeof(CMD_G_PVPInfo)) { return CT_FALSE; } if(m_ChallengeFight[0].dwUserID == 0 && m_ChallengeLook[4].dwUserID == 0) return CT_FALSE; G_ValueRange vr={0}; if(!G_GetValueRange(VALUE_TYPE_PVPCHEST,&vr)) { CCLogMeg::getSingleton().WriteError("CCUserPVPInfo::GetPVPInfo G_GetValueRange VALUE_TYPE_PVPCHEST"); } G_ValueRange FightingValue={0}; if(!G_GetValueRange(VALUE_TYPE_PVPFIGHTINGCOUNT,&FightingValue)) { CCLogMeg::getSingleton().WriteError("CCUserPVPInfo::GetPVPInfo G_GetValueRange VALUE_TYPE_PVPFIGHTINGCOUNT"); } MasterVariableData msc={0}; m_pUser->m_userBase.GetMasterData(msc); CT_INT64 lTime=time(0); CMD_G_PVPInfo PVPInfo={0}; CT_INT32 iFightingCount=(CT_INT32)(FightingValue.fMinVal-m_PVPInfo.iFightingCount+m_pUser->m_userVip.VipPriTimeGet(VIP_PRIVILEGE_ARENA)); PVPInfo.dwUserID=m_PVPInfo.dwUserID; PVPInfo.iFightingCount=(iFightingCount > 0?iFightingCount:0); PVPInfo.lRefreshTime=(m_PVPInfo.lRefreshTime > 0?m_PVPInfo.lRefreshTime-(lTime-m_PVPInfo.lBeginTime):0); PVPInfo.lRefreshTime=PVPInfo.lRefreshTime>0?PVPInfo.lRefreshTime:0; //PVPInfo.cbChestStatus=m_PVPInfo.cbChestStatus; PVPInfo.iPVPDegree=m_PVPInfo.iPVPDegree; PVPInfo.iDiamod=msc.stRes.iDiamod; for(CT_INT32 i=0;i<PVP_CHALLENGE_COUNT;++i) { if(m_ChallengeLook[i].dwUserID == 0)continue; PVPInfo.ChallengUserInfo[i]=m_ChallengeLook[i]; } memcpy(pBuf,&PVPInfo,sizeof(PVPInfo)); iLen=sizeof(PVPInfo); return CT_TRUE; }
CCCityEvent::CCCityEvent(CCGameMesManager* pMesManager, CT_DWORD id) : CCGameMesEvent(pMesManager, id) { RegistMessage(MAIN_G_EVENT_CITY, SUB_G_APPLY_AWARD_EVENT); RegistMessage(MSC_MAIN_EVENT_CITY, MSC_SUB_EVENT_FIGHTING_END); RegistMessage(MAIN_G_HEART_BEAT,0); RegistMessage(MSC_MAIN_BROADCAST, MSC_SUB_BROADCAST_WORLD); RegistMessage(MSC_MAIN_BROADCAST, MSC_SUB_BROADCAST_SYSTEM); RegistMessage(MSC_MAIN_BROADCAST, MSC_SUB_BROADCAST_GM); RegistMessage(MSC_MAIN_ANNOUNCEMENT_UPDATA,0); G_ValueRange vr = {0}; if(G_GetValueRange(VALUE_TYPE_UPDATEEVENTTIME, &vr)) { //建筑生产检测定时器 RegistTimer(IDI_EVENT_TIMER); SetTimer(IDI_EVENT_TIMER, (CT_INT32)(vr.fMaxVal * 1000 )); } //公告定时器 RegistTimer(IDI_ANNOUNCEMENT_UPDATA); SetTimer(IDI_ANNOUNCEMENT_UPDATA,TIME_ANNOUNCEMENT_UPDATA); //每日更新 if(m_dwThread == GAME_THREAD_CITY) { RegistClock(IDI_UPDATA_DATA); SetClock(IDI_UPDATA_DATA,0,0,0); } }
CCVipEvent::CCVipEvent(CCGameMesManager *pMesManager,CT_WORD id) : CCGameMesEvent(pMesManager,id) { RegistMessage(MAIN_G_VIP_EVENT_CITY,SUB_G_VIP_RENEWALS_REQUEST); RegistMessage(MAIN_G_VIP_EVENT_CITY,SUB_G_VIP_GIFT_RECEIVE_REQUEST); RegistMessage(MAIN_G_VIP_EVENT_CITY,SUB_G_VIP_HARVEST_ONCE_REQUEST); RegistMessage(MAIN_G_VIP_EVENT_CITY,SUB_G_VIP_ACTIVE); G_ValueRange vr = {0}; if(G_GetValueRange(VALUE_TYPE_VIP_TIME, &vr)) { RegistTimer(IDI_VIP_TIMER); SetTimer(IDI_VIP_TIMER, (CT_INT32)(vr.fMaxVal * 1000)); } memset(&vr,0,sizeof(vr)); if (G_GetValueRange(VALUE_TYPE_VIP_GIFT_CLOCK,&vr)) { RegistClock(IDI_VIP_GIFT_CLOCK); SetClock(IDI_VIP_GIFT_CLOCK, (CT_BYTE)vr.fMinVal,0,0); } }
CCCityUserBuildEvent::CCCityUserBuildEvent(CCGameMesManager* pMesManager, CT_DWORD id) : CCGameMesEvent(pMesManager, id) { //消息注册 RegistMessage(MAIN_G_APPLY_UPGRADE_CITY, SUB_G_APPLY_UPGRADE_BUILD); RegistMessage(MAIN_G_APPLY_UPGRADE_CITY, SUB_G_UPGRADE_SPEED_UP ); RegistMessage(MAIN_G_APPLY_UPGRADE_CITY, SUB_G_UPGRADE_SPEED_UP_REQUEST); RegistMessage(MSC_MAIN_DB_UPGRAE_FINISH, MSC_SUB_DB_R_BUILDING_UPGRADING_FINISH ); //设置全局定时器 //CT_INT32 threadID = GAME_THREAD_CITY /*+ rand() % ((CCGameConfig&)CCConfig::getSingleton()).m_gameThreadCityNum*/; //if (m_dwThread == threadID) //{ //定时器注册 G_ValueRange vr = {0}; if(G_GetValueRange(VALUE_TYPE_BUILDINGUPGRADETIME, &vr)) { if (vr.fMaxVal < 1) { CCLogMeg::getSingleton().WriteError("没有发现在全局配置文件中发现 VALUE_TYPE_BUILDINGUPGRADETIME = %i",0); abort(); } RegistTimer(IDI_UPGRADE_BUILDING_TIMER); SetTimer(IDI_UPGRADE_BUILDING_TIMER, (CT_INT32)(vr.fMaxVal*1000)); } if (G_GetValueRange(VALUE_TYPE_BUILDING_SYS_DATABASE_CHECK_TIME, &vr ) ) { if (vr.fMaxVal < 1) { CCLogMeg::getSingleton().WriteError("没有发现在全局配置文件中发现 VALUE_TYPE_BUILDING_SYS_DATABASE_CHECK_TIME = %i",0); abort(); } RegistTimer(IDI_BUILDING_SAVE_DATABASE_TIMER); SetTimer(IDI_BUILDING_SAVE_DATABASE_TIMER, (CT_INT32)(vr.fMaxVal*1000)); } }
//获取竞技场信息 CT_VOID CCUserPVPInfo::GetPVPInfo(PVPInfo &PVPinfo,CT_BOOL bIsServer) { _AUTOMUTEX(m_pMutex); memcpy(&PVPinfo,&m_PVPInfo,sizeof(PVPinfo)); if(!bIsServer) { G_ValueRange FightingValue={0}; if(!G_GetValueRange(VALUE_TYPE_PVPFIGHTINGCOUNT,&FightingValue)) { CCLogMeg::getSingleton().WriteError("CCUserPVPInfo::GetPVPInfo G_GetValueRange VALUE_TYPE_PVPFIGHTINGCOUNT"); } PVPinfo.iFightingCount=(CT_INT32)(FightingValue.fMinVal>m_PVPInfo.iFightingCount?(FightingValue.fMinVal- m_PVPInfo.iFightingCount):0); } }
//更新竞技度 CT_VOID CCUserManager::UpdataPVPDegree() { _AUTOMUTEX(&m_mutex); G_ValueRange Degree= {0}; if(!G_GetValueRange(VALUE_TYPE_PVPDEGREEUP,&Degree)) { CCLogMeg::getSingleton().WriteError("UpdataPVPDegree G_GetValueRange VALUE_TYPE_PVPDEGREEUP"); return; } CCUserManager::UDM_IT UserMapEnd=m_userDataMap.end(); for(CCUserManager::UDM_IT i=m_userDataMap.begin(); i != UserMapEnd; ++i) { (*i).second->UpdataPVPDegree((CT_INT32)Degree.fMinVal); } }
//更新领奖次数 CT_BOOL CCUserPVPInfo::UpDataChestNum(CT_BOOL bReset) { _AUTOMUTEX(m_pMutex); if(bReset) m_PVPInfo.iPVPChestNum=0; else { G_ValueRange vr={0}; if(!G_GetValueRange(VALUE_TYPE_PVPRECEIVE,&vr)) { CCLogMeg::getSingleton().WriteError("CCUserPVPInfo::UpDataChestNum G_GetValueRange VALUE_TYPE_PVPRECEIVE"); return CT_FALSE; } //vip add 增加宝箱次数 if(vr.fMinVal > m_PVPInfo.iPVPChestNum + m_pUser->m_userVip.VipPriTimeGet(VIP_PRIVILEGE_CHEST)) { m_PVPInfo.iPVPChestNum++; SetPVPDegree(-1); } } return CT_TRUE; }
CT_VOID CCCityUserBuildEvent::GetBuildSpeedUpRequest(const CMD_G_UpgradeBuildSpeedUp& ubsu) { CCUser* pUser = 0; if(!CCUserManager::getSingleton().Find(ubsu.dwUserID, &pUser)) { CCLogMeg::getSingleton().WriteError("CCCityUserBuildEvent::GetBuildSpeedUpRequest: Can't find user id: %i", ubsu.dwUserID); return; } CMD_G_UpgradeBuildSpeedUpFail bsf = {0}; bsf.dwUserID = ubsu.dwUserID; bsf.iBuildID = ubsu.iBuildID; UpgradingBuildData ubd = {0}; if (!pUser->m_userBuilding.GetUpgardingBuildingData(ubsu.iBuildID, ubd )) { bsf.ubsf = UBSF_NO_UPGRADING_BUILD; pUser->GetNetInterface()->Send(MAIN_G_APPLY_UPGRADE_CITY, SUB_G_UPGRADE_SPEED_UP_FAIL,(CT_CHAR*)&bsf, sizeof(bsf)); return; } G_ValueRange gvr = {0}; G_GetValueRange(VALUE_TYPE_BUILDSPEEDUP, &gvr); CT_INT32 leftTime = ubd.iNeedTime - (CT_INT32)(time(0) - ubd.llBeginTime); leftTime=(leftTime < 0?0:leftTime); CT_INT32 needDiamod = (CT_INT32)(leftTime * gvr.fMaxVal) - 1; //钻石消耗+1,避免0钻石加速情况 if (leftTime < 0) { CCLogMeg::getSingleton().WriteError("CCCityUserBuildEvent::GetBuildSpeedUpRequest: speed up need %i diamond", needDiamod); return ; } CMD_G_SpeedUpNeedResource nd = {0}; nd.dwUserID = ubsu.dwUserID; nd.iBuildID = ubsu.iBuildID; nd.iDiamod = needDiamod; pUser->GetNetInterface()->Send(MAIN_G_APPLY_UPGRADE_CITY,SUB_G_UPGRADE_SPEED_UP_REQUEST,(CT_CHAR*)&nd,sizeof(nd)); }
//处理建造加速 CT_VOID CCCityUserBuildEvent::DisposeUpgradeBuildSpeedUp(const CMD_G_UpgradeBuildSpeedUp& ubsu) { CCUser* pUser = 0; if(!CCUserManager::getSingleton().Find(ubsu.dwUserID, &pUser)) { CCLogMeg::getSingleton().WriteError("CCCityUserBuildEvent::DisposeUpgradeBuildSpeedUp: Can't find user id: %i", ubsu.dwUserID); return; } CMD_G_UpgradeBuildSpeedUpFail bsf = {0}; bsf.dwUserID = ubsu.dwUserID; bsf.iBuildID = ubsu.iBuildID; UpgradingBuildData ubd = {0}; if (!pUser->m_userBuilding.GetUpgardingBuildingData(ubsu.iBuildID, ubd )/*, !pUser->m_userBuilding.FindAutoBuilding(ubsu.iBuildID)*/) { bsf.ubsf = UBSF_NO_UPGRADING_BUILD; pUser->GetNetInterface()->Send(MAIN_G_APPLY_UPGRADE_CITY, SUB_G_UPGRADE_SPEED_UP_FAIL,(CT_CHAR*)&bsf, sizeof(bsf)); return; } //vip add 如果建筑是vip特权建筑,判断vip特权 int iPriID=0; if ((iPriID=G_GetVipPriIDByBuildID(ubsu.iBuildID))>0) { if (!pUser->m_userVip.VipHasPrivilege(iPriID)) { CCLogMeg::getSingleton().WriteError("CCCityUserBuildEvent::DisposeUpgradeBuildSpeedUp: build id: %d need vip pri %d \n", ubsu.iBuildID,iPriID ); pUser->CloseNet(); return; } } G_ValueRange gvr = {0}; G_GetValueRange(VALUE_TYPE_BUILDSPEEDUP, &gvr); CT_INT32 leftTime = ubd.buildingUpgrade.iNeedTime - (CT_INT32)(time(0) - ubd.llBeginTime); leftTime=(leftTime < 0?0:leftTime); CT_INT32 needDiamod = (CT_INT32)(leftTime * gvr.fMaxVal) - 1; //钻石消耗+1,避免0钻石加速情况 if (leftTime < 0) { CCLogMeg::getSingleton().WriteError("CCCityUserBuildEvent::DisposeUpgradeBuildSpeedUp: speed up need %i diamond", needDiamod); return ; } MasterData md = {0}; pUser->m_userBase. GetMasterData(md); if (md.mvd.stRes.iDiamod + needDiamod < 0) { bsf.ubsf = UBSF_NO_DIAMOD; pUser->GetNetInterface()->Send(MAIN_G_APPLY_UPGRADE_CITY, SUB_G_UPGRADE_SPEED_UP_FAIL, (CT_CHAR*)&bsf, sizeof(bsf)); return ; } MasterVariableData mvd = {0}; mvd.stRes.iDiamod = needDiamod; pUser->m_userBase.AddMastData(mvd, SAVETAG_CIVIL_UPGRADE_SPEE_UP_FINISH); pUser->m_userBase.GetMasterData(md); CMD_G_UpgradeBuildSpeedUpSuc sus = {0}; sus.dwUserID = ubsu.dwUserID; sus.iBuildID = ubsu.iBuildID; sus.iDiamod = md.mvd.stRes.iDiamod; pUser->GetNetInterface()->Send(MAIN_G_APPLY_UPGRADE_CITY, SUB_G_UPGRADE_SPEED_UP_SUC, (CT_CHAR*)&sus, sizeof(sus)); ubd.iNeedTime = 0; ubd.bSpeedUpTime = CT_TRUE; pUser->m_userBuilding.UpdateSaveBuildingData(CT_FALSE, CT_FALSE, CT_TRUE); //强制同步一次建筑数据到数据库,防止钻石加速数据被合并,这样的实现比较简单,但是效率低 //升级加速完成做修改,直接删除升级数据,写入钻石消耗,不在由定时器触发完成 UpgradedBuildingResult result = {0}; result.dwBid = ubd.iID; result.iCiviNum = ubd.buildingUpgrade.iCiliviNum; result.iDiamod = needDiamod; //ubd.buildingUpgrade.iDiamond; result.iFood = ubd.buildingUpgrade.iFood; result.iGold = ubd.buildingUpgrade.iGold; result.iProp1 = ubd.buildingUpgrade.iProp1; result.iProp1Num = ubd.buildingUpgrade.iPropNum1; result.iProp2 = ubd.buildingUpgrade.iProp2; result.iProp2Num = ubd.buildingUpgrade.iPropNum2; result.iProp3 = ubd.buildingUpgrade.iProp3; result.iProp3Num = ubd.buildingUpgrade.iPropNum3; result.iProp4 = ubd.buildingUpgrade.iProp4; result.iProp4Num = ubd.buildingUpgrade.iPropNum4; result.iWorker = ubd.buildingUpgrade.iWorker; //result.iSpeedTimes = (CT_INT32)ubd.bSpeedUpTime; result.iXp = ubd.buildingUpgrade.iXp; ++result.iUpgradeTimes; pUser->m_userBuilding.AddUpgradedBuildingResult(result); MSC_DB_R_BuildUpgradeFinish upgradeFinish = {0}; upgradeFinish.dwUserID = pUser->GetUserID(); upgradeFinish.iBID = ubd.iID; upgradeFinish.iGrade = ubd.buildingUpgrade.iGrade; DisposeDBBuildingFinish(upgradeFinish); //自动生产的建筑是否在生产 ProductingBuilding pb = {0}; if (pUser->m_userBuilding.FindAutoBuilding(ubsu.iBuildID, pb)) { pb.llTime = time(0); pUser->m_userBuilding.UpdateAutoBuilding(ubsu.iBuildID, pb); } };
//发送用户信息 CT_VOID CCUserEnterEvent::SendUserData(CT_DWORD userID, CCNetInterface* pNetHandle) { CT_CHAR buf[MAX_MES_MAX_BUFF_LEN]; memset(buf, 0, MAX_MES_MAX_BUFF_LEN); CT_INT32 bufLen = MAX_MES_MAX_BUFF_LEN; CCUser* pUser = 0; if (!CCUserManager::getSingleton().Find(userID, &pUser)) { CCLogMeg::getSingleton().WriteError("CCUserEnterEvent::SendUserData, fail to find %i", userID); return ; } //计算自动生产建筑 pUser->m_userBuilding. SysProductingBuilding(); //计算最大工作人数 pUser->CalMaxWorker(); //计算空闲工人数目 pUser->CountFreeWorker(); if( pUser->m_userBase.GetMasterData( buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_MASTER_INFO, (CT_CHAR*)buf, bufLen); } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen=MAX_MES_MAX_BUFF_LEN; if(pUser->m_userBase.GetMasterFightAdd(buf,bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_MASTER_FIGHTADD,(CT_CHAR*)buf, bufLen); } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if( pUser->m_userBuilding. GetBuildingData( buf, bufLen)) { if (bufLen > 0) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_BUILDING_INFO, buf, bufLen); } } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if( pUser->m_userBuilding. GetUpgardingBuildingData( buf, bufLen)) { if (bufLen > 0) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_UPGRADING_BUILDING_INFO, buf, bufLen); } } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userEvent.GetEvents(buf, bufLen)) { if (bufLen > 0) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_EVENTS, buf, bufLen); } } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userBuilding. GetProductingData(buf, bufLen)) { if (bufLen > 0) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_PRODUCTING_BUILDING_INFO, buf, bufLen); } } // 发送技能信息 pUser->m_userSkill.SendClientData(MAIN_G_ENTER_ENV, SUB_G_SKILL_INFO, buf, sizeof(buf)); // 发送潜能信息 pUser->m_userTalent.SendClientData(MAIN_G_ENTER_ENV, SUB_G_TALENT_INFO, buf, sizeof(buf)); // 发送道具信息 pUser->m_userItem.SendClientData(MAIN_G_ENTER_ENV, SUB_G_ITEM_INFO, buf, sizeof(buf)); // 发送装备信息 pUser->m_userEquip.SendClientData(MAIN_G_ENTER_ENV, SUB_G_EQUIP_INFO, buf, sizeof(buf)); // 发送元素之力信息 pUser->m_userElmPower.SendClientData(MAIN_G_ENTER_ENV, SUB_G_ELMPOWER_INFO, buf, sizeof(buf)); // 发送战旗信息 pUser->m_userBattleFlag.SendClientData(MAIN_G_ENTER_ENV, SUB_G_BATTLEFLAG_INFO, buf, sizeof(buf)); // 发送元素属性信息 pUser->m_userElmAttr.SendClientData(MAIN_G_ENTER_ENV, SUB_G_ELMATTR_INFO, buf, sizeof(buf)); // 发送增益信息 pUser->m_userBuff.SendClientData(MAIN_G_ENTER_ENV, SUB_G_BUFF_INFO, buf, sizeof(buf)); // 发送军队信息 pUser->m_userArmy.SendClientData(MAIN_G_ENTER_ENV, SUB_G_ARMY_INFO, buf, sizeof(buf)); //// 发送军队信息 //memset(buf, 0, MAX_MES_MAX_BUFF_LEN); //bufLen = MAX_MES_MAX_BUFF_LEN; //if (pUser->m_userArmy.GetArmyInfo(buf, bufLen)) //{ // pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ARMY_INFO, buf, bufLen); //} // 发送宠物信息 /*memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->GetPetData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_PET_INFO, buf, bufLen); }*/ // Begin [10/22/2012 wangchen] // 发送副本信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->GetDuplicateData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_DUPLICATE_INFO, buf, bufLen); } // End [10/22/2012 wangchen] //发送区域信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userRegion.GetUnlockRegionData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_REGION_INFO, buf, bufLen); } //发送未完成任务信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userTask.GetUnFinishedTask(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_TASK_INFO, buf, bufLen); } // 发送日常任务信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userDaily.GetDailyQuestData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_DAILY_QUEST, buf, bufLen); } // 发送活跃度信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userDaily.GetActiveData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ACTIVE_DATA, buf, bufLen); } // 发送竞技场信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userPVPInfo.GetPVPInfo(buf, bufLen)) { CT_INT32 iOutLen=MAX_MES_MAX_BUFF_LEN; if(CCCompress::getSingleton().Compress(buf,bufLen,buf,iOutLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_PVP_INFO, buf, iOutLen); } } //发送竞技场战报 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(pUser->m_userPVPInfo.GetPVPRectord(buf,bufLen)) { CT_INT32 iOutLen=MAX_MES_MAX_BUFF_LEN; if(CCCompress::getSingleton().Compress(buf,bufLen,buf,iOutLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_PVP_FIGHTING_RECORD, buf, iOutLen); } } //发送商店信息 CCMarket::getSingleton().SendUserMarketInfo(pUser); pUser->m_userBlackMarket.SendBlackRefreshTime(); // pUser->m_userBlackMarket.RefreshShopTime(); // 发送个人限购 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userBlackMarket.GetMarketPersonal(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_MARKET_PARSONAL, buf, bufLen); } // 发送能力冷却信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userBase. GetCooldownData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_COOLDOWN_INFO, buf, bufLen); } //发送宠物信息 pUser->m_userPet.SendUserPetInfo(); //发送vip信息 pUser->m_userVip.VipSendInfo(); //发送活动信息 pUser->m_userActive.SendUserActiveInfo(); //发送祭祀信息 pUser->m_userWorship.SendUserWorshipInfo(); // 发送附魔信息 pUser->m_userEnchant.SendClientData(MAIN_G_ENTER_ENV, SUB_G_ENCHANT_DATA, buf, sizeof(buf)); // 发送已获得附魔奖励 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userEnchant.GetEnchantReward(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ENCHANT_REWARD_DATA, buf, bufLen * sizeof(CT_INT32)); } // 发送好友信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userFriend.GetFriendData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FRIEND_INFO, buf, bufLen); } // 发送好友请求信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userFriend.GetFriendReq(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FRIEND_REQ, buf, bufLen); } // 发送好友黑名单信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userFriend.GetBlackName(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FRIEND_BLACKNAME, buf, bufLen); } //发送资源点场景开启信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCResourceGrabMgr::getSingleton().GetResourceScene(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_RESSPOT_SCENE_OPEN, buf, bufLen); } // 发送资源争夺场景信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCResourceGrabMgr::getSingleton().GetUserResData(userID, buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_RESSPOT_SCENCE_INFO, buf, bufLen); } //发送元素之塔信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCTowerResManager::getSingleton().GetUserResData(userID, buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ELEMENT_TOWER_SCENCE_INFO, buf, bufLen); } //元素塔通关数据 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userTower.GetTowerData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_TOWER_DATA_INFO, buf, bufLen); } //占领点生产奖励 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userTower.GetTowerSlotAward(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_TOWER_SLOTAWARD_INFO, buf, bufLen); } //系统留言 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userTower.GetTowerMSG(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_TOWER_MSG_INFO, buf, bufLen); } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userTower.GetEventData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ELEMENT_TOWER_EVENT_INFO, buf, bufLen); } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCTowerResManager::getSingleton().GetTowerFightExample(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_TOWER_FIGHT_INFO, buf, bufLen); } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userTower.GetHelpData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ELEMENT_TOWER_HELP_INFO, buf, bufLen); } //发送活动 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userActive.GetPresent(buf, bufLen) && bufLen > 0) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ACTIVE_PRESENT, buf, bufLen); } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userActive.GetPresentDesc(buf, bufLen) && bufLen > 0) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ACTIVE_PRESENT_DESC, buf, bufLen); } //发送活动描述 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCActive::getSingleton().GetActiveDsc(buf,bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ACTIVE_DEC, buf, bufLen); } //发送未开启功能 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->GetFunctionOpen(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FUNCTION_OPEN, buf, bufLen); } //发送活动资源的 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(CCResourceGrabMgr::getSingleton().GetResActive()) { CMD_G_ResActive ra={0}; time_t t=time(0); ra.iTime=CCResourceGrabMgr::getSingleton().GetLastTime(); ra.iTime=(ra.iTime <= -1?-1:ra.iTime-t); memcpy(buf,&ra,sizeof(ra)); if (CCResourceGrabMgr::getSingleton().GetResActiveSpot(buf+sizeof(ra),bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_RESSPOT_ACTIVE_OPEN, buf, bufLen+sizeof(ra)); } } else { CMD_G_ResActive ra={0}; time_t t=time(0); ra.iTime=CCResourceGrabMgr::getSingleton().GetLastTime(); ra.iTime=(ra.iTime <= -1?-1:ra.iTime-t); if(ra.iTime != -1) pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_RESSPOT_ACTIVE_CLOSE, (CT_CHAR*)&ra, sizeof(ra)); } memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(pUser->m_userBoss.GetRecord(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_WORLD_BOSS_RECORD, buf, bufLen); } //发送世界BOSS活动 CMD_G_BossActive ra={0}; ra.iTime=CCBossManager::getSingleton().GetLastTime(); ra.iTime=(ra.iTime <= -1?-1:ra.iTime-time(0)); ra.iAEID=CCBossManager::getSingleton().GetAEID(); ra.iHPMax=CCBossManager::getSingleton().GetBossHPMax(); ra.iHP=CCBossManager::getSingleton().GetBossHP(); ra.iBossGrade=CCBossManager::getSingleton().GetBossGrade(); if(CCBossManager::getSingleton().GetActive()) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_WORLD_BOSS_ACTIVE_OPEN, (CT_CHAR*)&ra, sizeof(ra)); } else { if(ra.iTime != -1) pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_WORLD_BOSS_ACTIVE_CLOSE, (CT_CHAR*)&ra, sizeof(ra)); else CCLogMeg::getSingleton().WriteError("CCUserEnterEvent::BOSS_ACTIVE, iTime == -1"); } CCBossManager::getSingleton().UserLogin(userID); memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCActive::getSingleton().GetReward(buf,bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ACTIVE_REWARD_UPDATE, buf, bufLen); } //副本信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(pUser->m_userDuplicate.GetSceneInfo(buf,bufLen)) { CT_INT32 iOutLen=MAX_MES_MAX_BUFF_LEN; CMD_G_SceneInfo si={0}; memcpy(&si,buf,sizeof(si)); //si.iCompress=CT_TRUE; //memcpy(buf,&si,sizeof(si)); if(CCCompress::getSingleton().Compress(buf+sizeof(si),bufLen,buf+sizeof(si),iOutLen)) //if(CCCompress::getSingleton().Compress(buf,bufLen+sizeof(si),buf,iOutLen)) { si.iCompress=CT_TRUE; memcpy(buf,&si,sizeof(si)); pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_SCENE_INFO, buf, iOutLen+sizeof(si)); //pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_SCENE_INFO, buf, iOutLen); } else { si.iCompress=CT_FALSE; memcpy(buf,&si,sizeof(si)); pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_SCENE_INFO, buf, bufLen+sizeof(si)); } } //阵法信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(pUser->m_userBattleArray.GetBattleArray(buf,bufLen)) { pUser->GetNetInterface()->Send(MAIN_G_ENTER_ENV,SUB_G_BATTLE_ARRAY_INFO,buf,bufLen); } //排行信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(pUser->m_userBase.GetMasterTopInfo(buf,bufLen)) { pUser->GetNetInterface()->Send(MAIN_G_ENTER_ENV,SUB_G_RANKINGLIST_INFO,buf,bufLen); } // 更新战斗状态 - 要在其他数据完成之后更新 [10/15/2012 John] memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->GetBattleStatusData(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_BUTTLE_STATUS_INFO, buf, bufLen); } // 发送战队信息 UpdateBattleStatus()之后才有用户战斗力等数据 CMD_G_FightTeamBase fightTeamBase = {0}; CT_DWORD dwFTID=0; CCFightTeam *pFightTeam=0; dwFTID = CCFightTeamManager::getSingleton().GetFightTeamIDByUser(userID); if (CCFightTeamManager::getSingleton().Find(dwFTID, &pFightTeam)) { pFightTeam->GetFightTeamBase(&fightTeamBase); pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FIGHTTEAM_BASE, (CT_CHAR*)&fightTeamBase, sizeof(CMD_G_FightTeamBase)); //战队召唤boss FightTeamSummonBoss sb={0}; if(pFightTeam->GetSummonInfo(sb)) { CMD_G_FightTeamHelpSummonInfo hsInfo={0}; hsInfo.dwUserID=userID; hsInfo.iErrorID=(sb.iWiner == FT_SUMMON_WIN?sb.iWiner:FT_SUMMON_SUC); hsInfo.iBossIndex=sb.iBossIndex; memcpy(hsInfo.dwHelpSummonID,sb.dwUserID,sizeof(hsInfo.dwHelpSummonID)); pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FIGHTTEAM_SUMMON_BOSS_INFO, (CT_CHAR*)&hsInfo, sizeof(hsInfo)); } //召唤奖励 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(pFightTeam->GetSummonRewardRes(userID, buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FIGHTTEAM_SUMMON_REWARD_INFO, buf, bufLen); } //召唤奖励 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pFightTeam->GetSummonRewardItem(userID, buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FIGHTTEAM_SUMMON_REWARD_ITEM, buf, bufLen); } //时限boss FTTimeBossInfo tbi={0}; CT_INT32 iHelpCount=0; pFightTeam->GetTimeBossInfo(tbi); for(CT_INT32 i=0;i<HELP_SUMMON_COUNT;++i) { if(tbi.iHelpUser[i] != 0) iHelpCount++; } G_ValueRange vrft={0}; if(!G_GetValueRange(VALUE_TYPE_FT_TIME_BOSS_FIGHTTIME,&vrft)) { CCLogMeg::getSingleton().WriteError("CCUserEnterEvent::SendUserData G_GetValueRange VALUE_TYPE_FT_TIME_BOSS_FIGHTTIME"); } G_ValueRange vrbs={0}; if(!G_GetValueRange(VALUE_TYPE_FT_TIME_BOSS_SUMMON,&vrbs)) { CCLogMeg::getSingleton().WriteError("CCUserEnterEvent::SendUserData G_GetValueRange VALUE_TYPE_FT_TIME_BOSS_SUMMON"); } //插入冷却时间 CooldownData cd={0}; CT_INT32 lTime=time(0); pUser->m_userBase.GetCooldownData(FTTIMEBOSS_SUMMON,cd); if(cd.leftTime+ cd.toggleTime <= lTime) { cd.iType=FTTIMEBOSS_SUMMON; cd.toggleTime=lTime; cd.leftTime=tbi.iSummonBeginTime+vrbs.fMaxVal-lTime; pUser->m_userBase.InsertCooldownData(cd); pUser->m_userBase.UpdateCooldown(FTTIMEBOSS_SUMMON,0); } if(tbi.iCurrentHP == pFightTeam->GetTBMaxHP() && tbi.iSummonBeginTime != 0 && iHelpCount < HELP_SUMMON_FIGHT_COUNT) { CMD_G_FTTimeBossInfo bi={0}; bi.dwUserID=pUser->GetUserID(); bi.iBossID=tbi.iIndex; memcpy(bi.dwHelpSummonID,tbi.iHelpUser,sizeof(bi.dwHelpSummonID)); pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_FIGHTTEAM_TIMEBOSS_INFO,(CT_CHAR*)&bi,sizeof(bi)); } else if(tbi.iCurrentHP <= pFightTeam->GetTBMaxHP() && tbi.iCurrentHP != 0) { CMD_G_FTTimeBossFightInfo bfi={0}; FTTimeBossMember bm={0}; CT_CHAR cBuf[MAX_MES_MAX_BUFF_LEN]={0}; CT_DWORD dwLen=MAX_MES_MAX_BUFF_LEN; pFightTeam->GetTimeBossMember(userID,bm); bfi.iBossID=tbi.iIndex; bfi.iBossMaxHP=pFightTeam->GetTBMaxHP(); bfi.iCurrentHP=tbi.iCurrentHP; bfi.iFTBossTime=tbi.iSummonBeginTime+vrft.fMaxVal-lTime; bfi.iFTContribute=bm.iFTContribute; bfi.iFTFood=bm.iFTFood; bfi.iFightNum=bm.iFightNum; pFightTeam->GetFightTeamMember(cBuf,dwLen); for(CT_INT32 i=0;i<dwLen/sizeof(CMD_G_FightTeamMember) && i < HELP_SUMMON_COUNT;++i) { CMD_G_FightTeamMember ftm={0}; memcpy(&ftm,cBuf+i*sizeof(CMD_G_FightTeamMember),sizeof(CMD_G_FightTeamMember)); bfi.dwUserID[i]=ftm.dwUserID; memset(&bm,0,sizeof(bm)); pFightTeam->GetTimeBossMember(ftm.dwUserID,bm); bfi.iHurt[i]=bm.iHurt; } for(CT_INT32 i=0;i<HELP_SUMMON_COUNT;++i) { if(tbi.iHelpUser[i] != 0) bfi.iMemberCount++; } pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_FIGHTTEAM_TIMEBOSS_FIGHT_INFO,(CT_CHAR*)&bfi,sizeof(bfi)); } else if(tbi.iIndex != 0) { CMD_G_FTTimeBossIndex tbbi={0}; tbbi.iIndex=tbi.iIndex; pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_FIGHTTEAM_TIMEBOSS_INDEX,(CT_CHAR*)&tbbi,sizeof(tbbi)); memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if(pFightTeam->GetTBReward(buf,bufLen)) pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_FIGHTTEAM_TIMEBOSS_REWARD_INFO,buf,bufLen); } } CCFightTeamManager::getSingleton().UserLoginEvent(userID); // 更新战队成员在线状态 //科技信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userFightTeamNember.GetNemberScience(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_FIGHTTEAM_SCIENCE_INFO, buf, bufLen); } //发送公告 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCBroadcastScriptSetting::getSingleton().GetAnnouncementByIndex(buf,bufLen,ANNONCEMENT_TOWN)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ANNOUNCEMENT, buf, bufLen); } //发送活动公告 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (CCBroadcastScriptSetting::getSingleton().GetAnnouncementByIndex(buf,bufLen,ANNONCEMENT_ACTIVE)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ACTIVENOTICE, buf, bufLen); } //跨服战 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; CMD_G_CrossBaseInfo cb={0}; cb.iStatus=CCCSFightData::getSingleton().GetStatus(); memcpy(buf,&cb,sizeof(cb)); bufLen-=sizeof(cb); CCCSFightData::getSingleton().GetUserReward(pUser->GetUserID(),buf+sizeof(cb),bufLen); pNetHandle->Send(MAIN_G_CROSS_SERVER,SUB_G_CROSS_SERVER_BASEINFO, buf, bufLen+sizeof(cb)); //头衔 pUser->m_userTitle.SendClientData(MAIN_G_ENTER_ENV, SUB_G_TITLE_DATA, buf, sizeof(buf)); memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userTitle.GetTitleList(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_TITLE_LIST, buf, bufLen); } //龙岛 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userIsland.GetIslandData(buf, bufLen, fightTeamBase.dwFTID)) { pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ISLAND_DATA, buf, bufLen); } //城墙加成信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userSeek.GetWallAddition(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_SEEK_WALL_ADDITION_INFO, buf, bufLen); } //城墙军队 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userSeek.GetWallArmy(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_SEEK_ARMY_INFO, buf, bufLen); } //探访信息 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userSeek.GetSeekInfo(buf, bufLen)) { pNetHandle->Send(MAIN_G_ENTER_ENV,SUB_G_SEEK_DATA, buf, bufLen); } //发送完成(客户端未使用) //pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ENTER_SUC); //计算扫荡奖励 MSC_RaidsReward RaidsReward={0}; RaidsReward.dwUserID=pUser->GetUserID(); CT_DWORD threadid = GAME_THREAD_CITY + pUser->GetUserID() % ((CCGameConfig&)CCConfig::getSingleton()).m_gameThreadCityNum; G_SendThreadInfo(threadid,MSC_MAIN_DUPLICATE_EVENT,MSC_SUB_RAIDS_REWARD,(CT_CHAR*)&RaidsReward,sizeof(RaidsReward)); pNetHandle->Send(MAIN_G_ENTER_ENV, SUB_G_ENTER_FINISH); //上线广播 { MasterData masterData = {0}; pUser->m_userBase.GetMasterData(masterData); if(strlen(masterData.cNickName) == 0) return; // 战斗力排行广播 if (masterData.mvd.topData.TopInfo[TOP_TYPE_POWER].iRankingCur > 0 && masterData.mvd.topData.TopInfo[TOP_TYPE_POWER].iRankingCur < 4) { RollBroadcast rb[2]={0}; rb[0].SetValue(masterData.mvd.topData.TopInfo[TOP_TYPE_POWER].iRankingCur,""); rb[1].SetValue(userID, masterData.cNickName); //sprintf(cBroadcastMes+sizeof(iBroadcastType)+sizeof(iBroadcastTime), "{26}<6:%d>{17}<1:%d:%s>{27}",masterData.mvd.topData.TopInfo[TOP_TYPE_POWER].iRankingCur, userID, masterData.cNickName); G_SendRollBroadecast(26,2,1,(CT_CHAR*)rb,sizeof(rb)); } // 等级排行广播 if (masterData.mvd.topData.TopInfo[TOP_TYPE_GRADE].iRankingCur > 0 && masterData.mvd.topData.TopInfo[TOP_TYPE_GRADE].iRankingCur < 4) { RollBroadcast rb[2]={0}; rb[0].SetValue(masterData.mvd.topData.TopInfo[TOP_TYPE_GRADE].iRankingCur,""); rb[1].SetValue(userID, masterData.cNickName); //sprintf(cBroadcastMes+sizeof(iBroadcastType)+sizeof(iBroadcastTime), "{41}<6:%d>{17}<1:%d:%s>{27}",masterData.mvd.topData.TopInfo[TOP_TYPE_GRADE].iRankingCur,userID, masterData.cNickName); G_SendRollBroadecast(41,2,1,(CT_CHAR*)rb,sizeof(rb)); } // 装备拥有广播 memset(buf, 0, MAX_MES_MAX_BUFF_LEN); bufLen = MAX_MES_MAX_BUFF_LEN; if (pUser->m_userItem. GetEquipedItemData(buf, bufLen)) { CMD_G_ItemData *pItemData = 0; CT_INT32 iCount = bufLen / sizeof(CMD_G_ItemData); for(CT_INT32 i=0; i<iCount; ++i) { pItemData = (CMD_G_ItemData *)(buf + i * sizeof(CMD_G_ItemData)); if (G_BroadcastFilter(8, pItemData->iID)) { RollBroadcast rb[2]={0}; rb[0].SetValue(pItemData->iID,""); rb[1].SetValue(userID, masterData.cNickName); //sprintf(cBroadcastMes+sizeof(iBroadcastType)+sizeof(iBroadcastTime), "{36}<2:%d>{17}<1:%d:%s>{37}",pItemData->iID, userID, masterData.cNickName); G_SendRollBroadecast(36,2,1,(CT_CHAR*)rb,sizeof(rb)); } else if (G_BroadcastFilter(9, pItemData->iID)) { RollBroadcast rb[2]={0}; rb[0].SetValue(pItemData->iID,""); rb[1].SetValue(userID, masterData.cNickName); //sprintf(cBroadcastMes+sizeof(iBroadcastType)+sizeof(iBroadcastTime), "{36}<2:%d>{17}<1:%d:%s>{37}",pItemData->iID, userID, masterData.cNickName); G_SendRollBroadecast(129,2,1,(CT_CHAR*)rb,sizeof(rb)); } } } //头衔广播 if(pUser->m_userTitle.GetUseTitleID() == TITLE_CHOMPION_ID) { RollBroadcast rb={0}; rb.SetValue(pUser->GetUserID(),masterData.cNickName); G_SendRollBroadecast(132,2,1,(CT_CHAR*)&rb,sizeof(rb)); } else if(pUser->m_userTitle.GetUseTitleID() == TITLE_THE_BEST_TEAM_ID) { RollBroadcast rb={0}; rb.SetValue(pUser->GetUserID(),masterData.cNickName); G_SendRollBroadecast(133,2,1,(CT_CHAR*)&rb,sizeof(rb)); } else if(pUser->m_userTitle.GetUseTitleID() == TITLE_BIG_LOCAL_TYRANTS) { RollBroadcast rb={0}; rb.SetValue(pUser->GetUserID(),masterData.cNickName); G_SendRollBroadecast(134,2,1,(CT_CHAR*)&rb,sizeof(rb)); } else if(pUser->m_userTitle.GetUseTitleID() == TITLE_MOST_RICH) { RollBroadcast rb={0}; rb.SetValue(pUser->GetUserID(),masterData.cNickName); G_SendRollBroadecast(138,2,1,(CT_CHAR*)&rb,sizeof(rb)); } } }
CT_VOID CCUserManager::GetOnlineUserData(CT_DWORD UserID, CT_CHAR *out_buf, CT_INT32 &bufLen, CT_INT32 iType) { _AUTOMUTEX(&m_mutex); UDM_IT it = m_userDataMap.begin(); UDM_IT endIT = m_userDataMap.end(); CMD_G_FriendData friendData = {0}; CMD_G_PlayerData PlayerData = {0}; MasterData masterData = {0}; CT_INT32 n = 0; CT_DWORD F_UID = 0; CT_INT32 iCount = 50; CCUser *pUser=0; if (!Find(UserID,&pUser)) { return; } PlayerData.dwUserID = UserID; friendData.dwUserID = UserID; G_ValueRange vr= {0}; if (iType == 2) { iCount = 100; //因为要去掉已加入战队的玩家,所以增加50个. G_GetValueRange(VALUE_TYPE_FIGHTTEAM_GRADE,&vr); } for (; it!=endIT && n < iCount; ++it) { F_UID = it->second->GetUserID(); if (F_UID == UserID) //去掉自己 { continue; } if (iType == 1 && CT_FALSE == it->second->m_userFriend.IsEnable()) { continue; } if (pUser->m_userFriend.CheckIsFriend(F_UID) || pUser->m_userFriend.CheckBlackList(F_UID)) { // 去掉已经是好友,黑名单,反向黑名单 continue; } it->second->m_userBase.GetMasterData(masterData); if (iType == 2 && masterData.mvd.stGrade.iLevel < vr.fMaxVal) { continue; } if (iType == 1) { friendData.dwF_UID = it->second->GetUserID(); CCUser* pFUser; if (Find(friendData.dwF_UID, &pFUser)) { friendData.iTitleID = pFUser->m_userTitle.GetUseTitleID(); } memcpy(friendData.cF_NickName, masterData.cNickName, NAME_SIZE); friendData.iF_Occupation = masterData.iOccupation; friendData.iF_Grade = masterData.mvd.stGrade.iLevel; friendData.iF_Status = 1; friendData.iF_FightingPower = masterData.mvd.stRes.iFightingPower; memcpy(out_buf + (sizeof(CMD_G_FriendData) * n), (CT_CHAR*)&friendData, sizeof(CMD_G_FriendData)); } else { PlayerData.dwPlayer = it->second->GetUserID(); memcpy(PlayerData.cF_NickName, masterData.cNickName, NAME_SIZE); PlayerData.iF_Occupation = masterData.iOccupation; PlayerData.iF_Grade = masterData.mvd.stGrade.iLevel; PlayerData.iF_Status = 1; PlayerData.iF_FightingPower = masterData.mvd.stRes.iFightingPower; memcpy(out_buf + (sizeof(CMD_G_PlayerData) * n), (CT_CHAR*)&PlayerData, sizeof(CMD_G_PlayerData)); } n++; } if (iType == 1) { bufLen = sizeof(CMD_G_FriendData) * n; } else { bufLen = sizeof(CMD_G_PlayerData) * n; } }