pcslayerinfo2.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 275 行

CPP
275
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : PCSlayerInfo2.cpp// Written By  : Reiot// Description ://////////////////////////////////////////////////////////////////////////////#include "PCSlayerInfo2.h"//////////////////////////////////////////////////////////////////////////////// read data from socket input stream//////////////////////////////////////////////////////////////////////////////void PCSlayerInfo2::read ( SocketInputStream & iStream ) 	throw ( ProtocolException , Error ){	__BEGIN_TRY	try 	{		// read object id		iStream.read( m_ObjectID );		// read slayer name		BYTE szName;		iStream.read( szName );		if ( szName == 0 )			throw InvalidProtocolException("szName == 0");		if ( szName > 20 )			throw InvalidProtocolException("too long name length");		iStream.read( m_Name , szName );		// read sex		BYTE sex;		iStream.read( sex );		m_Sex = Sex(sex);		// read hair style		BYTE hairStyle;		iStream.read( hairStyle );		m_HairStyle = HairStyle(hairStyle);		// read colors		iStream.read( m_HairColor );		iStream.read( m_SkinColor );		// read Alignment		iStream.read( m_Alignment );				// read attributes		iStream.read( m_STR[ATTR_CURRENT] );		iStream.read( m_STR[ATTR_MAX] );		iStream.read( m_STR[ATTR_BASIC] );		iStream.read( m_DEX[ATTR_CURRENT] );		iStream.read( m_DEX[ATTR_MAX] );		iStream.read( m_DEX[ATTR_BASIC] );		iStream.read( m_INT[ATTR_CURRENT] );		iStream.read( m_INT[ATTR_MAX] );		iStream.read( m_INT[ATTR_BASIC] );				iStream.read( m_Rank );		iStream.read( m_RankExp );		// read attributes Exp		iStream.read( m_STRExp );		iStream.read( m_DEXExp );		iStream.read( m_INTExp );		// read hp/mp		iStream.read( m_HP[ATTR_CURRENT] );		iStream.read( m_HP[ATTR_MAX] );		iStream.read( m_MP[ATTR_CURRENT] );		iStream.read( m_MP[ATTR_MAX] );		// read misc		iStream.read( m_Fame );		iStream.read( m_Gold );		// read skills		for ( uint i = 0 ; i < SKILL_DOMAIN_VAMPIRE ; i ++ ) {			iStream.read( m_DomainLevels[i] );			iStream.read( m_DomainExps[i] );		}		// read sight		iStream.read( m_Sight );		// read sight		for( int i = 0 ; i < 4 ; i++ ) 		{			iStream.read( m_HotKey[i] );		}		// read competence		iStream.read( m_Competence );		iStream.read( m_GuildID );		BYTE szGuildName;		iStream.read( szGuildName );		if ( szGuildName > 30 )			throw InvalidProtocolException( "too long szGuildName size" );		if ( szGuildName != 0 )			iStream.read( m_GuildName, szGuildName );		iStream.read( m_GuildMemberRank );	} 	catch ( Throwable & t ) 	{		cout << t.toString() << endl;	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// write data to socket output stream//////////////////////////////////////////////////////////////////////////////void PCSlayerInfo2::write ( SocketOutputStream & oStream ) const 	throw ( ProtocolException , Error ){	__BEGIN_TRY	try 	{		// write object id		oStream.write( m_ObjectID );		// write slayer name		BYTE szName = m_Name.size();		if ( szName == 0 )			throw InvalidProtocolException("szName == 0");		if ( szName > 20 )			throw InvalidProtocolException("too long name length");		oStream.write( szName );		oStream.write( m_Name );		// write sex		oStream.write( (BYTE)m_Sex );		// write hair style		oStream.write( (BYTE)m_HairStyle );		// write colors		oStream.write( m_HairColor );		oStream.write( m_SkinColor );		// write Alignment		oStream.write( m_Alignment );				// write attributes		// 持绰 鉴辑绰 ATTR_CURRENT, ATTR_MAX, ATTR_BASIC		oStream.write( m_STR[ATTR_CURRENT] );		oStream.write( m_STR[ATTR_MAX] );		oStream.write( m_STR[ATTR_BASIC] );		oStream.write( m_DEX[ATTR_CURRENT] );		oStream.write( m_DEX[ATTR_MAX] );		oStream.write( m_DEX[ATTR_BASIC] );		oStream.write( m_INT[ATTR_CURRENT] );		oStream.write( m_INT[ATTR_MAX] );		oStream.write( m_INT[ATTR_BASIC] );				oStream.write( m_Rank );		oStream.write( m_RankExp );//		cout << m_RankExp << endl;		// write attributes		oStream.write( m_STRExp );		oStream.write( m_DEXExp );		oStream.write( m_INTExp );		// write hp/mp		oStream.write( m_HP[ATTR_CURRENT] );		oStream.write( m_HP[ATTR_MAX] );		oStream.write( m_MP[ATTR_CURRENT] );		oStream.write( m_MP[ATTR_MAX] );		// write misc		oStream.write( m_Fame );		oStream.write( m_Gold );		// write skills		for ( uint i = 0 ; i < SKILL_DOMAIN_VAMPIRE ; i ++ ) {			oStream.write( m_DomainLevels[i] );			oStream.write( m_DomainExps[i] );		}		// write sight		oStream.write( m_Sight );		// write HotKey		for( int i = 0; i < 4; i++ ) 		{			oStream.write( m_HotKey[i] );		}		// write competence		oStream.write( m_Competence );		oStream.write( m_GuildID );		BYTE szGuildName = m_GuildName.size();		if ( szGuildName > 30 )			throw InvalidProtocolException( "too long guild name length" );		oStream.write( szGuildName );		if ( szGuildName != 0 )			oStream.write( m_GuildName );		oStream.write( m_GuildMemberRank );	} 	catch ( Throwable & t ) 	{		cout << t.toString() << endl;	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// get debug string//////////////////////////////////////////////////////////////////////////////string PCSlayerInfo2::toString () const 	throw (){	StringStream msg;	msg << "PCSlayerInfo2("		<< "ObjectID:" << m_ObjectID		<< ",Name:" << m_Name		<< ",Sex:" << Sex2String[m_Sex]		<< ",HairStyle:" << HairStyle2String[m_HairStyle]		<< ",HairColor:" << (int)m_HairColor		<< ",SkinColor:" << (int)m_SkinColor		<< ",Alignment:" << m_Alignment		<< ",Rank:" << (int)m_Rank		<< ",RankExp:" << (int)m_RankExp		<< ",STR[CURRENT]:" << (int)m_STR[ATTR_CURRENT]		<< ",STR[MAX]:" << (int)m_STR[ATTR_MAX]		<< ",STR[BASIC]:" << (int)m_STR[ATTR_BASIC]		<< ",DEX[CURRENT]:" << (int)m_DEX[ATTR_CURRENT]		<< ",DEX[MAX]:" << (int)m_DEX[ATTR_MAX]		<< ",DEX[BASIC]:" << (int)m_DEX[ATTR_BASIC]		<< ",INT[CURRENT]:" << (int)m_INT[ATTR_CURRENT]		<< ",INT[MAX]:" << (int)m_INT[ATTR_MAX]		<< ",INT[BASIC]:" << (int)m_INT[ATTR_BASIC]		<< ",HP:" << m_HP[ATTR_CURRENT] << "/" << m_HP[ATTR_MAX]		<< ",MP:" << m_MP[ATTR_CURRENT] << "/" << m_MP[ATTR_MAX]		<< ",Fame:" << m_Fame		<< ",Gold:" << m_Gold;			for(uint i=0;i<SKILL_DOMAIN_VAMPIRE;i++)		msg << "," << SkillDomain2String[i] << ":" 			<< (int)m_DomainLevels[i] << "/" << m_DomainExps[i];	msg << ",Sight:" << (int)m_Sight		<< ",F9:" << (int)m_HotKey[0]		<< ",F10:" << (int)m_HotKey[1]		<< ",F11:" << (int)m_HotKey[2]		<< ",F12:" << (int)m_HotKey[3]		<< ",Competence:" << (int)m_Competence		<< ",GuildID:" << (int)m_GuildID		<< ")";		return msg.toString();}

⌨️ 快捷键说明

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