⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msguserattrib.cpp

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 CPP
字号:
#include "AllMsg.h"
#include "hero.h"
#include "GamePlayerSet.h"
#include "3DGameMap.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMsgUserAttrib::CMsgUserAttrib()
{
	Init();
	m_pInfo	=(MSG_Info *)m_bufMsg;
}

CMsgUserAttrib::~CMsgUserAttrib()
{

}

//////////////////////////////////////////////////////////////////////
BOOL CMsgUserAttrib::Create(char* pbufMsg, DWORD dwMsgSize)
{
	if (!CNetMsg::Create(pbufMsg, dwMsgSize))
		return false;

	if(_MSG_USERATTRIB != this->GetType())
		return false;

	return true;
}

//////////////////////////////////////////////////////////////////////
void CMsgUserAttrib::Process(void *pInfo)
{
	CPlayer* pPlayer	=g_objPlayerSet.GetPlayer(m_pInfo->idUser);
	if (!pPlayer)
	{
		if (m_pInfo->idUser == g_objHero.GetID())
			pPlayer	=&g_objHero;
		else if (g_objHero.GetTeamMemberInfoByID (m_pInfo->idUser))	//在playerset中找不到队友的hp maxhp变化处理
		{
			int nAmount = (int)m_pInfo->dwAttributeNum;
			for(int i = 0; i < nAmount; i ++)
			{
				switch(m_pInfo->aUserAttrib[i].ucAttributeType)
				{
				case _USERATTRIB_MAXLIFE:
					g_objHero.SetTeamMemberMaxHp(m_pInfo->idUser, m_pInfo->aUserAttrib[i].dwAttributeData);
					break;
				case _USERATTRIB_LIFE:
					g_objHero.SetTeamMemberHp(m_pInfo->idUser, m_pInfo->aUserAttrib[i].dwAttributeData);
					break;
				default:
					break;
				}
			}
			return;
		}
		else
			return;
	}

	int nAmount = (int)m_pInfo->dwAttributeNum;
	for(int i = 0; i < nAmount; i ++)
	{
		switch(m_pInfo->aUserAttrib[i].ucAttributeType)
		{
		case _USERATTRIB_MAXEUDEMON:
			if (pPlayer->GetID() == g_objHero.GetID()) 
			{
				g_objHero.SetMaxPetCall(m_pInfo->aUserAttrib[i].dwAttributeData);
			}
			break;
		case _USERATTRIB_MAXENERGY:
			pPlayer->SetMaxPhysicalForce(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_LEV:
			pPlayer->SetLev(m_pInfo->aUserAttrib[i].dwAttributeData);
			if (pPlayer->GetID() == g_objHero.GetID())
			{
				g_objHero.SetData(CPlayer::_PLAYER_CURRENTLIFE, 0);
				g_objHero.SetCurMana(0);
				::PostCmd(CMD_LEVELUP);
			}
			break;

		case _USERATTRIB_MAXLIFE:
			pPlayer->SetMaxLife(m_pInfo->aUserAttrib[i].dwAttributeData);
			g_objHero.SetTeamMemberMaxHp(pPlayer->GetID(), m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
			
		case _USERATTRIB_LIFE:
			pPlayer->SetData(CPlayer::_PLAYER_LIFE, m_pInfo->aUserAttrib[i].dwAttributeData);
			//pPlayer->SetLife(m_pInfo->aUserAttrib[i].dwAttributeData);
			g_objHero.SetTeamMemberHp(pPlayer->GetID(), m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_MONEY:
			if (g_objHero.GetID() == m_pInfo->idUser)
				g_objHero.SetMoney(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_MANA:
			pPlayer->SetData(CPlayer::_PLAYER_MANA,m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_HAIR:
			pPlayer->SetHair(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_EXP:
			{
				DWORD dwExp = pPlayer->GetExp();
				if(dwExp < m_pInfo->aUserAttrib[i].dwAttributeData)
				{
					int nShowExp = m_pInfo->aUserAttrib[i].dwAttributeData - dwExp;
					if (pPlayer->GetLev() > 70)
						nShowExp = nShowExp*10 + ::RandGet(10);
					g_objGameMap.SetShowExp(nShowExp);
				}
				pPlayer->SetExp(m_pInfo->aUserAttrib[i].dwAttributeData);
			}
			break;
		case _USERATTRIB_LOOK:
			pPlayer->SetFace((m_pInfo->aUserAttrib[i].dwAttributeData/10000)%1000);
			pPlayer->SetSex((m_pInfo->aUserAttrib[i].dwAttributeData/1000)%10);
			pPlayer->Transform(m_pInfo->aUserAttrib[i].dwAttributeData/10000000);
			break;
		case _USERATTRIB_USERSTATUS:
			{
				__int64 dwStatus = pPlayer->GetStatus();
				pPlayer->ReplaceStatus((dwStatus&0xffffffff00000000) + m_pInfo->aUserAttrib[i].dwAttributeData);
			}
			break;
		case _USERATTRIB_KEEPEFFECT2:
			{
				__int64 dwStatus = pPlayer->GetStatus();
				__int64 dwStatusCopy = m_pInfo->aUserAttrib[i].dwAttributeData;
				pPlayer->ReplaceStatus((dwStatus&0x00000000ffffffff) + (dwStatusCopy<<32));
			}
			break;
		case _USERATTRIB_ADDPOINT:
			pPlayer->SetAddPoint(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_PK:
			pPlayer->SetPk(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		
		case _USERATTRIB_PORFESSION:
			{
				pPlayer->SetProfession(m_pInfo->aUserAttrib[i].dwAttributeData);
				if (m_pInfo->idUser == g_objHero.GetID() && g_objHero.m_bCanSetHelpTips)
					g_objHero.SetHelpTip();					
			}					
			break;

		case _USERATTRIB_SOUL:
			pPlayer->SetSoul(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_HEALTH:
			pPlayer->SetHealth(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_FORCE:
			pPlayer->SetForce(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;

		case _USERATTRIB_SPEED:
			{
				if (pPlayer->TestStatus(USERSTATUS_TEAMLEADER)&&
				(pPlayer->TestStatus(USERSTATUS_TEAM_HEALTH)||
					pPlayer->TestStatus(USERSTATUS_TEAM_ATTACK)||
					pPlayer->TestStatus(USERSTATUS_TEAM_DEFENCE)||
					pPlayer->TestStatus(USERSTATUS_TEAM_SPEED)||
					pPlayer->TestStatus(USERSTATUS_TEAM_EXP)||
					pPlayer->TestStatus(USERSTATUS_TEAM_SPIRIT)||
					pPlayer->TestStatus(USERSTATUS_TEAM_CLEAN)) )
				{
					break;
				}
				else
					pPlayer->SetSpeedRate(m_pInfo->aUserAttrib[i].dwAttributeData);
			}
			break;
		case _USERATTRIB_XP:
			if (pPlayer->GetID() == g_objHero.GetID() && g_objHero.IsXpSkillEnable() && !(g_objGameMap.GetType () & MAPTYPE_BOOTH_ENABLE))
			{
				pPlayer->SetXP(m_pInfo->aUserAttrib[i].dwAttributeData);
				::PostCmd(CMD_XPCHANGE);
				if (m_pInfo->aUserAttrib[i].dwAttributeData == g_objHero.GetMaxXP()) 
					::PostCmd(CMD_XPFULL);
				if (m_pInfo->aUserAttrib[i].dwAttributeData == 0)
					::PostCmd(CMD_XPEMPTY);
			}
			else if (pPlayer->GetID() != g_objHero.GetID())
			{
				pPlayer->SetXP(m_pInfo->aUserAttrib[i].dwAttributeData);
			}
			break;
		case _USERATTRIB_PP:
			pPlayer->SetPhysicalForce(m_pInfo->aUserAttrib[i].dwAttributeData);
			::PostCmd(CMD_PPCHANGE);
			break;
		case _USERATTRIB_PROFFER:
			pPlayer->SetSyndicateProffer((int)m_pInfo->aUserAttrib[i].dwAttributeData);
			::PostCmd(CMD_FLASH_SYNDICATE);
			break;
		case _USERATTRIB_KO_ORDER:
			if(pPlayer->GetID() == g_objHero.GetID())
				g_objHero.SetKoXpAdd(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_EXPLOIT:
			pPlayer->SetExploit(m_pInfo->aUserAttrib[i].dwAttributeData);			
			break;
		case _USERATTRIB_NOBILITYRANK:
			pPlayer->SetNobilityRank(m_pInfo->aUserAttrib[i].dwAttributeData);			
			break;
		case _USERATTRIB_ACTIONSPEED:
			pPlayer->SetSpeedRate(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_MERCENARYLEVEL:
			{
				pPlayer->SetMercenaryLevel(m_pInfo->aUserAttrib[i].dwAttributeData);
				if (m_pInfo->idUser == g_objHero.GetID() && g_objHero.m_bCanSetHelpTips)
					g_objHero.SetHelpTip();					
			}
			break;
		case _USERATTRIB_MERCENARYEXP:
			pPlayer->SetMercenaryExp(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_FAT:
			break;
		case _USERATTRIB_TUTOR_EXP:
			pPlayer->SetTutorExp(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_TUTOR_LEVEL:
			pPlayer->SetTutorLevel(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_DEX:
			pPlayer->SetSpeed(m_pInfo->aUserAttrib[i].dwAttributeData);
			pPlayer->SetDexterity(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_POTENTIAL:
			pPlayer->SetPotential(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		case _USERATTRIB_MAXLIFEPERCENT:
			pPlayer->SetMaxLifePercent(m_pInfo->aUserAttrib[i].dwAttributeData);
			break;
		default:
			break;
		}
	}
	if((m_pInfo->aUserAttrib[i].ucAttributeType != _USERATTRIB_EXP) &&
		(m_pInfo->aUserAttrib[i].ucAttributeType != _USERATTRIB_MANA) &&
		(m_pInfo->aUserAttrib[i].ucAttributeType != _USERATTRIB_LIFE) &&
		(m_pInfo->aUserAttrib[i].ucAttributeType != _USERATTRIB_MONEY))
	{
		if (m_pInfo->idUser == g_objHero.GetID())
			::PostCmd(CMD_LEVELUP);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -