コード例 #1
0
//设置竞技度
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;
}
コード例 #2
0
//获取竞技场信息
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;
}
コード例 #3
0
ファイル: CCityEvent.cpp プロジェクト: WangLuofan/GameServer
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);
	}
}
コード例 #4
0
ファイル: CVipEvent.cpp プロジェクト: WangLuofan/GameServer
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);
	}
}
コード例 #5
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));
		}
}
コード例 #6
0
//获取竞技场信息
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);
	}

}
コード例 #7
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);
    }
}
コード例 #8
0
//更新领奖次数
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;
}
コード例 #9
0
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));
}
コード例 #10
0
//处理建造加速
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);
	}
};
コード例 #11
0
//发送用户信息
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));
		}
	}
}
コード例 #12
0
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;
    }
}