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 (); }
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 (); }
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)"); } }
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 (); }
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 ); }