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

📄 party.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include "Field.h"
#include "Player.h"
#include "PartyState.h"
#include "Party.h"
#include <PacketStruct_CG.h>
#include "PartyManager.h"


Party::Party() : m_pMemberHashTable(NULL)
{
	m_pMemberHashTable = new util::SolarHashTable<Player*>;
	m_pMemberHashTable->Initialize( MAX_PARTYMEMBER_NUM );

	Init( INITIAL_KEY_VALUE );
}

Party::~Party()
{
	SAFE_DELETE( m_pMemberHashTable );
}

VOID Party::Init( DWORD dwMasterUserKey )
{
	Character *pMember = NULL;
	m_pMemberHashTable->SetFirst();
	while( (pMember = m_pMemberHashTable->GetNext()) != NULL )
	{
		pMember->GetPartyState().SetState( PARTY_STATE_BE_FREE );
	}

	m_pMemberHashTable->RemoveAll();

	m_dwMasterUserKey = dwMasterUserKey;
	m_dwMasterObjKey = INITIAL_KEY_VALUE;
	m_dwTotalLevel = 0;
	m_eDistributionType = eITEM_DISTRIBUTION_DEFAULT;
	m_dwTargetObjKeyOfParty = 0;
}

BOOL Party::Join( Player * pPlayer )
{
	// 颇萍俊 曼啊且 荐 乐绰瘤 眉农
	if( !CanJoin( pPlayer->GetObjectKey() ) )
	{
		return FALSE;
	}

	bool bMaster = m_dwMasterUserKey == pPlayer->GetUserKey();
	if( bMaster )
	{
		m_dwMasterObjKey = pPlayer->GetObjectKey();
	}

	// 糕滚府胶飘俊 眠啊
	m_pMemberHashTable->Add( pPlayer, pPlayer->GetObjectKey() );

	// 敲饭捞绢狼 颇萍惑怕 盎脚
	pPlayer->GetPartyState().JoinParty( m_wPartyKey, bMaster );

	// 颇萍盔 饭骇 敲矾胶
	m_dwTotalLevel += pPlayer->GetLevel();

	// 鞘靛俊 乐绰 葛电 NPC甸狼 HP甫 促矫 汲沥茄促.
	SetNpcHpOfField();

	return TRUE;
}

BOOL Party::Leave( DWORD dwObjKey )
{
	// 秦寸某腐磐啊 颇萍盔俊 粮犁窍绰瘤 眉农
	Character *pMember = m_pMemberHashTable->GetData( dwObjKey );
	if( NULL == pMember )
	{
//		SUNLOG( eFULL_LOG,  "Party : [Leave] The Character[%d] doesn't exist! ", dwObjKey );
		return FALSE;
	}

	// 糕滚府胶飘俊辑 昏力
	m_pMemberHashTable->Remove( dwObjKey );

	// 规厘阑 呕硼矫虐绰瘤 眉农
	if( m_dwMasterObjKey == dwObjKey )
	{
		// TAIYO : 2006/1/22
		// 烙矫肺 阜澜 东户
		/*
		m_dwMasterUserKey = INITIAL_KEY_VALUE;
		m_dwMasterObjKey = INITIAL_KEY_VALUE;
		*/
	}

	// 敲饭捞绢狼 颇萍惑怕 盎脚
	pMember->GetPartyState().SetState( PARTY_STATE_BE_FREE );

	// 颇萍盔 饭骇 付捞呈胶
	LEVELTYPE MemberLV = pMember->GetLevel();
	if( m_dwTotalLevel >= MemberLV )
	{
		m_dwTotalLevel -= MemberLV;
	}
	else
	{
		m_dwTotalLevel = 0;
	}

	// 鞘靛俊 乐绰 葛电 NPC甸狼 HP甫 促矫 汲沥茄促.
	SetNpcHpOfField();

	// 规 秦眉矫 绢瞒乔 颇萍绰 秦眉等促.
	// 颇萍啊 粮加且 荐 绝促搁 秦眉茄促.
/*	if( !GetMemberNum() )
	{
		PartyManager::Instance()->RemoveParty( m_wPartyKey, FALSE );
	}*/

	return TRUE;
}

VOID Party::ChangeMaster( DWORD dwNewMasterUserKey )
{
	bool bMaster = FALSE;
	Player *pMember = NULL;
	m_pMemberHashTable->SetFirst();
	while( (pMember = m_pMemberHashTable->GetNext()) != NULL )
	{
		bMaster = pMember->GetUserKey() == dwNewMasterUserKey;

		// 敲饭捞绢狼 颇萍惑怕 盎脚
		pMember->GetPartyState().JoinParty( m_wPartyKey, bMaster );

		if( bMaster )
		{
			m_dwMasterObjKey = pMember->GetObjectKey();
		}
	}

	m_dwMasterUserKey = dwNewMasterUserKey;
}

BOOL Party::CanJoin( DWORD dwObjKey )
{
	// 弥措糕滚荐甫 檬苞窍瘤 臼绰瘤 眉农
	if( m_pMemberHashTable->GetDataNum() >= MAX_PARTYMEMBER_NUM )
	{
		return FALSE;
	}

	// 捞固 粮犁窍绰 某腐磐牢瘤 眉农
	if( NULL != m_pMemberHashTable->GetData( dwObjKey ) )	
	{
		SUNLOG( eCRITICAL_LOG,  "[Party::CanJoin] The Character[%d] already exists! ", dwObjKey );
		return FALSE;
	}

	return TRUE;
}

BOOL Party::SendPacketAll( MSG_BASE_FORWARD * pMsg, WORD wSize )
{
	Character *pMember = NULL;
	m_pMemberHashTable->SetFirst();
	while( (pMember = m_pMemberHashTable->GetNext()) != NULL )
	{
		pMember->SendPacket( pMsg, wSize );
	}

	return TRUE;
}


BOOL Party::SendPacketExceptMe( DWORD dwObjKey, MSG_BASE_FORWARD * pMsg, WORD wSize )
{
	Player *pMember = NULL;
	m_pMemberHashTable->SetFirst();
	while( (pMember = m_pMemberHashTable->GetNext()) != NULL )
	{
		if( pMember->GetObjectKey() == dwObjKey )		continue;

		pMember->SendPacket( pMsg, wSize );
	}

	return TRUE;
}


VOID Party::GetMemberInfoAll( PARTY_MEMBER_INFO *pMemberInfoAll )
{
	int i = 0;
	Player *pMember = NULL;
	m_pMemberHashTable->SetFirst();
	while( pMember = m_pMemberHashTable->GetNext() )
	{
		pMemberInfoAll[i].m_dwObjKey = pMember->GetObjectKey();
		strncpy( pMemberInfoAll[i].m_szCharName, pMember->GetCharName(), MAX_CHARNAME_LENGTH );
		pMemberInfoAll[i].m_wLevel = pMember->GetLevel();
		pMemberInfoAll[i].m_dwHP = pMember->GetHP();

		if( m_dwMasterUserKey == pMember->GetUserKey() )
		{
			pMemberInfoAll[i].m_bMaster = TRUE;
		}
		else
		{
			pMemberInfoAll[i].m_bMaster = FALSE;
		}

		++i;
	}
}

DWORD Party::FindNextMaster()
{
	Player *pMember = NULL;
	m_pMemberHashTable->SetFirst();
	while( (pMember = m_pMemberHashTable->GetNext()) != NULL )
	{
		if( pMember->GetObjectKey() == m_dwMasterObjKey )	continue;

		return pMember->GetObjectKey();
	}

	return 0;
}

Player* Party::GetMemberInfo( char *pszName )
{
	Player *pMember = NULL;
	m_pMemberHashTable->SetFirst();
	while( (pMember = m_pMemberHashTable->GetNext()) != NULL )
	{
		if( strcmp( pMember->GetCharName(), pszName ) != 0 )	continue;

		return pMember;
	}

	return NULL;
}

VOID Party::MemberLevelUp( DWORD dwObjKey )
{
	// 秦寸某腐磐啊 颇萍盔俊 粮犁窍绰瘤 眉农
	Player *pMember = m_pMemberHashTable->GetData( dwObjKey );
	if( NULL == pMember )
	{
		SUNLOG( eCRITICAL_LOG,  "[Party::MemberLevelUp] The Character[%d] doesn't exist! ", dwObjKey );
		return;
	}

	// 傈眉饭骇阑 棵妨霖促.
	++m_dwTotalLevel;
}

class SetHPAttackPowerOperator
{
	DWORD	m_dwCurMemberNum;

public:
	SetHPAttackPowerOperator( DWORD dwCurMemberNum ) : m_dwCurMemberNum(dwCurMemberNum) {}

	VOID operator () ( NPC *pNPC )
	{
		pNPC->SetHPAttackPowerAsParty( m_dwCurMemberNum );
	}
};

VOID Party::SetNpcHpOfField()
{
	// 颇萍啊 加茄 鞘靛甫 茫绰促.
	Character *pMember = m_pMemberHashTable->GetData( m_dwMasterObjKey );
	if( !pMember )	return;

	Field* pField = pMember->GetField();
	if( !pField )	return;

	// 鞘靛俊 加窍绰 葛电 NPC甸狼 HP客 傍拜仿阑 促矫 汲沥茄促.
	SetHPAttackPowerOperator SetOpr( GetMemberNum() );
	pField->ForEachNPC( SetOpr );
}














⌨️ 快捷键说明

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