예제 #1
0
void CPartyMng::AddConnection( CPlayer* pPlayer )
{
	CParty* pParty;
	CMclAutoLock	Lock( m_AddRemoveLock );
	
	pParty	= GetParty( pPlayer->m_uPartyId );
	if( pParty )
	{
		int i	= pParty->FindMember( pPlayer->uKey );
		if( i < 0 )
		{
			pPlayer->m_uPartyId		= 0;
			return;
		}

		pParty->m_aMember[i].m_bRemove	= FALSE;
		pParty->m_nReferens--;

		BEFORESENDDUAL( ar, PACKETTYPE_ADDPLAYERPARTY, DPID_UNKNOWN, DPID_UNKNOWN );
		ar << pPlayer->m_uPartyId << pPlayer->uKey;
		SEND( ar, &g_dpCoreSrvr, DPID_ALLPLAYERS );
	}
	else
		pPlayer->m_uPartyId		= 0;
}
예제 #2
0
void vClient::SendWCWantedReward(u_long idPlayer, u_long idAttacker, char* szFormat, DWORD dwWorldID, const D3DXVECTOR3& vPos, int nLayer)
{
	BEFORESENDDUAL(ar, 34603162, -1, -1 );
	ar << idPlayer << idAttacker << dwWorldID << vPos;
	ar.WriteString(szFormat);
	ar << nLayer;
	SEND( ar, addrCoreClient, 1 );
}
void CGuildHouseDBCtrl::SendGuildHouse( DPID dpId )
{
	if( !GuildHouseMng->IsEmpty() )
	{
		BEFORESENDDUAL( ar, PACKETTYPE_GUILDHOUSE_LOAD, DPID_UNKNOWN, DPID_UNKNOWN );
		GuildHouseMng->Serialize( ar );
		SEND( ar, CDPTrans::GetInstance(), dpId );
	}
}
void CGuildHouseDBCtrl::RemoveGuildHouse( DWORD dwGuildId )
{
	if( GetQueryObject()->Execute( "usp_GuildHouse_Delete '%02d', '%06d'", g_appInfo.dwSys, dwGuildId ) )
		GuildHouseMng->RemoveGuildHouse( dwGuildId );
	
	BEFORESENDDUAL( arOut, PACKETTYPE_GUILDHOUSE_REMOVE, DPID_UNKNOWN, DPID_UNKNOWN );
	arOut << dwGuildId;
	SEND( arOut, CDPTrans::GetInstance(), DPID_ALLPLAYERS );

}
void CGuildHouseDBCtrl::RunDefaultPacket( CAr & ar, DPID dpId )
{
	DWORD dwGuildId;
	int nPacketType, nIndex;
	GH_Fntr_Info gfi;

	ar >> dwGuildId >> nPacketType >> nIndex;
	gfi.Serialize( ar );

	CGuildHouseBase* pGuildHouse = GuildHouseMng->GetGuildHouse( dwGuildId );
	if( pGuildHouse )
	{
		BOOL bResult = FALSE;
		if( ExcuteQuery( dwGuildId, pGuildHouse, nPacketType, gfi, nIndex ) )
			 bResult = pGuildHouse->OnGuildHousePacket( nPacketType, gfi, nIndex );

		if( bResult ) dpId = DPID_ALLPLAYERS;
		BEFORESENDDUAL( arOut, PACKETTYPE_GUILDHOUSE_PACKET, DPID_UNKNOWN, DPID_UNKNOWN );
		arOut << bResult << dwGuildId;
		arOut << nPacketType << nIndex;
		gfi.Serialize( arOut );
		SEND( arOut, CDPTrans::GetInstance(), dpId );
	}
}
void CGuildHouseDBCtrl::CreateGuildHouse( CAr & ar, DPID dpId )
{
	DWORD dwPlayerId, dwGuildId;
	ar >> dwPlayerId >> dwGuildId;
	
	BOOL bResult = FALSE;
	CQuery* pQuery = GetQueryObject();

	BEFORESENDDUAL( arCreate, PACKETTYPE_GUILDHOUSE_BUY, DPID_UNKNOWN, DPID_UNKNOWN );
	{
		arCreate << dwPlayerId << dwGuildId;
		CGuildHouseBase* pGuildHouse = GuildHouseMng->MakeGuildHouse( dwGuildId, WI_GUILDHOUSE_SMALL );
		if( pGuildHouse )
		{
			pGuildHouse->SetUpkeeptime( time_null() + ( UPKEEP_DAY_TIME * 7 ) );	// 기본 유지기간을 제공한다.
			if( pQuery->Execute( "usp_GuildHouse_Insert '%02d', '%06d', %d, %d", g_appInfo.dwSys, dwGuildId, WI_GUILDHOUSE_SMALL, pGuildHouse->GetUpkeepTime() ) // DB에 추가 성공
				&& GuildHouseMng->AddGuildHouse( dwGuildId, pGuildHouse ) )
			{
				arCreate << TRUE;
				dpId = DPID_ALLPLAYERS;	// 모든 월드 서버로 전송한다.
				GH_Fntr_Info gfi( II_GHOU_FUR_NPC_TELEPORTER, TRUE, pGuildHouse->GetTeleporterPos(), 0.0f, ( UPKEEP_DAY_TIME * 7 ) );
				if( ExcuteQuery( dwGuildId, pGuildHouse, GUILDHOUSE_PCKTTYPE_LISTUP, gfi, NULL_ID ) )
					pGuildHouse->OnGuildHousePacket( GUILDHOUSE_PCKTTYPE_LISTUP, gfi, NULL_ID );
				pGuildHouse->SerializeAllInfo( arCreate );
			}
			else
			{
				arCreate << FALSE;
				SAFE_DELETE( pGuildHouse );
			}
		}
		else
			arCreate << FALSE;
	}
	SEND( arCreate, CDPTrans::GetInstance(), dpId );
}
예제 #7
0
void CPartyMng::RemoveConnection( CPlayer* pPlayer )
{
	if( pPlayer->m_uPartyId == 0 )
		return;

	CParty* pParty;
	CMclAutoLock	Lock( m_AddRemoveLock );
	
	pParty	= GetParty( pPlayer->m_uPartyId );
	if( pParty )
	{
		int i	= pParty->FindMember( pPlayer->uKey );
		if( i < 0 )
			return;
		pParty->m_aMember[i].m_tTime	= CTime::GetCurrentTime();
		pParty->m_aMember[i].m_bRemove	= TRUE;
		pParty->m_nReferens++;

		BEFORESENDDUAL( ar, PACKETTYPE_REMOVEPLAYERPARTY, DPID_UNKNOWN, DPID_UNKNOWN );
		ar << pPlayer->m_uPartyId << pPlayer->uKey;
		SEND( ar, &g_dpCoreSrvr, DPID_ALLPLAYERS );

#if __VER >= 12 // __PARSKILL1001 090917 mirchang - 파스킬 아이템 수정
		if( pParty->m_nModeTime[PARTY_PARSKILL_MODE] )
			g_dpCoreSrvr.SendSetPartyMode( pParty->m_uPartyId, PARTY_PARSKILL_MODE, FALSE );
#endif // __PARSKILL1001 090917 mirchang - 파스킬 아이템 수정

		if( i == 0 )
		{
			bool fRemoveParty	= true;
			for( int j = 1; j < pParty->m_nSizeofMember; j++ )
			{
				if( pParty->m_aMember[j].m_bRemove == FALSE )
				{
					fRemoveParty	= false;
					pParty->SwapPartyMember( 0, j );
					break;
				}
			}
#if __VER >= 12 // __PARSKILL1001	//12차 파스킬 아이템 수정  world,core,neuz
			for( int k = 0 ; k < MAX_PARTYMODE ; k++ )
			{
				if( pParty->m_nModeTime[k] )
				{
					if( k == PARTY_PARSKILL_MODE)
						continue;
					pParty->m_nModeTime[k] = 0;
				}
			}
#endif //__PARSKILL1001	//12차 파스킬 아이템 수정  world,core,neuz

			if( fRemoveParty )
			{
				CPlayer* pPlayer;
				for( j = 0; j < pParty->m_nSizeofMember; j++ )
				{
					pPlayer		= g_PlayerMng.GetPlayer( pParty->GetPlayerId( j ) );
					if( pPlayer )
						pPlayer->m_uPartyId		= 0;
				}
				DeleteParty( pParty->m_uPartyId );
			}
		}
	}
}