Пример #1
0
void NczPlayerManager::ClientActive ( SourceSdk::edict_t* pEntity )
{
	const int index ( Helpers::IndexOfEdict ( pEntity ) );
	LoggerAssert ( index );
	PlayerHandler& ph ( FullHandlersList[ index ] );
	if( ph.status == SlotStatus::INVALID ) // Bots don't call ClientConnect
	{
		ph.playerClass = new NczPlayer ( index );
		__assume ( ph.playerClass != nullptr );
		ph.playerClass->m_playerinfo = ( SourceSdk::IPlayerInfo * )SourceSdk::InterfacesProxy::Call_GetPlayerInfo ( ph.playerClass->m_edict );
		LoggerAssert ( ph.playerClass->m_playerinfo );
#undef GetClassName
		if( strcmp ( pEntity->GetClassName (), "player" ) == 0 )
			ph.status = SlotStatus::TV;
		else
			ph.status = SlotStatus::BOT;
	}
	else
	{
		LoggerAssert ( ph.status == SlotStatus::PLAYER_CONNECTING );
		ph.status = SlotStatus::PLAYER_CONNECTED;
		ph.playerClass->m_playerinfo = ( SourceSdk::IPlayerInfo * )SourceSdk::InterfacesProxy::Call_GetPlayerInfo ( ph.playerClass->m_edict );
		LoggerAssert ( ph.playerClass->m_playerinfo );
	}

	if( index > m_max_index ) m_max_index = index;

	PlayerHandler::first = ( &FullHandlersList[ 1 ] );
	PlayerHandler::last = ( &FullHandlersList[ m_max_index ] );

	BaseSystem::ManageSystems ();
}
Пример #2
0
void NczPlayerManager::ClientConnect ( SourceSdk::edict_t* pEntity )
{
	const int index ( Helpers::IndexOfEdict ( pEntity ) );
	LoggerAssert ( index );
	PlayerHandler& ph ( FullHandlersList[ index ] );
	LoggerAssert ( ph.status == SlotStatus::INVALID || ph.status == SlotStatus::PLAYER_CONNECTING );
	ph.playerClass = new NczPlayer ( index );
	// Should not be here, but heh ...
	//*PlayerRunCommandHookListener::GetLastUserCmd(ph.playerClass) = SourceSdk::CUserCmd();
	ph.status = SlotStatus::PLAYER_CONNECTING;
	ph.playerClass->OnConnect ();

	if( index > m_max_index ) m_max_index = index;

	PlayerHandler::first = ( &FullHandlersList[ 1 ] );
	PlayerHandler::last = ( &FullHandlersList[ m_max_index ] );

	BaseSystem::ManageSystems ();
}
Пример #3
0
void WeaponHookListener::HookWeapon ( PlayerHandler::const_iterator ph )
{
	LoggerAssert ( Helpers::isValidEdict ( ph->GetEdict () ) );
	void* unk ( ph->GetEdict ()->m_pUnk );

	HookInfo info_equip ( unk, ConfigManager::GetInstance ()->vfid_weaponequip, ( DWORD ) RT_nWeapon_Equip );
	HookInfo info_drop ( unk, ConfigManager::GetInstance ()->vfid_weapondrop, ( DWORD ) RT_nWeapon_Drop );
	HookGuard<WeaponHookListener>::GetInstance ()->VirtualTableHook ( info_equip );
	HookGuard<WeaponHookListener>::GetInstance ()->VirtualTableHook ( info_drop );
}
void SetTransmitHookListener::HookSetTransmit ( SourceSdk::edict_t const * const ent, bool isplayer )
{
	LoggerAssert ( Helpers::isValidEdict ( ent ) );
	void* unk ( ent->m_pUnk );

	if (isplayer)
	{
		HookInfo info(unk, g_ConfigManager.vfid_settransmit, (DWORD)RT_nSetTransmit);
		g_HookGuardSetTransmitHookListener.VirtualTableHook(info, "CBaseEntity::SetTransmit");
	}
	else
	{
		HookInfo info(unk, g_ConfigManager.vfid_settransmit, (DWORD)RT_nSetTransmitWeapon);
		g_HookGuardSetTransmitHookListenerWeapon.VirtualTableHook(info, "CBaseEntity::SetTransmit (Weapon)");
	}
}
Пример #5
0
void NczPlayerManager::ClientDisconnect ( SourceSdk::edict_t* pEntity )
{
	const int index ( Helpers::IndexOfEdict ( pEntity ) );
	LoggerAssert ( index );
	FullHandlersList[ index ].Reset ();

	while( m_max_index > 0 && FullHandlersList[ m_max_index ].status == SlotStatus::INVALID )
		--m_max_index;

	if( m_max_index )
	{
		PlayerHandler::first = ( &FullHandlersList[ 1 ] );
		PlayerHandler::last = ( &FullHandlersList[ m_max_index ] );
	}
	else
	{
		PlayerHandler::first = PlayerHandler::invalid;
		PlayerHandler::last = PlayerHandler::invalid;
	}

	BaseSystem::ManageSystems ();
}
Пример #6
0
void HOOKFN_INT WeaponHookListener::RT_nWeapon_Drop ( void * const basePlayer, void * const, void * const weapon, SourceSdk::Vector const * const targetVec, SourceSdk::Vector const * const velocity )
#endif
{
	PlayerHandler::const_iterator ph ( NczPlayerManager::GetInstance ()->GetPlayerHandlerByBasePlayer ( basePlayer ) );

	if( ph != SlotStatus::INVALID && weapon != nullptr )
	{
		SourceSdk::edict_t* const weapon_ent ( SourceSdk::InterfacesProxy::Call_BaseEntityToEdict ( weapon ) );

		LoggerAssert ( Helpers::isValidEdict ( weapon_ent ) );

		WeaponHookListenersListT::elem_t* it2 ( m_listeners.GetFirst () );
		while( it2 != nullptr )
		{
			it2->m_value.listener->RT_WeaponDropCallback ( ph, weapon_ent );

			it2 = it2->m_next;
		}
	}

	WeaponDrop_t gpOldFn;
	*( DWORD* )&( gpOldFn ) = HookGuard<WeaponHookListener>::GetInstance ()->RT_GetOldFunction ( basePlayer, ConfigManager::GetInstance ()->vfid_weapondrop );
	gpOldFn ( basePlayer, weapon, targetVec, velocity );
}