void CClientPacketRecorder::ReadLocalData(FILE* pFile) { // Grab the local player CClientPlayer* pPlayer = m_pManager->GetPlayerManager()->GetLocalPlayer(); if (pPlayer) { // Grab the vehicle CClientVehicle* pVehicle = pPlayer->GetOccupiedVehicle(); if (pVehicle) { // Temp vars CMatrix matVehicle; CVector vecMoveSpeed; CVector vecTurnSpeed; float fHealth; // Read it out fread(&matVehicle.vRight.fX, sizeof(float), 1, pFile); fread(&matVehicle.vRight.fY, sizeof(float), 1, pFile); fread(&matVehicle.vRight.fZ, sizeof(float), 1, pFile); fread(&matVehicle.vFront.fX, sizeof(float), 1, pFile); fread(&matVehicle.vFront.fY, sizeof(float), 1, pFile); fread(&matVehicle.vFront.fZ, sizeof(float), 1, pFile); fread(&matVehicle.vUp.fX, sizeof(float), 1, pFile); fread(&matVehicle.vUp.fY, sizeof(float), 1, pFile); fread(&matVehicle.vUp.fZ, sizeof(float), 1, pFile); fread(&matVehicle.vPos.fX, sizeof(float), 1, pFile); fread(&matVehicle.vPos.fY, sizeof(float), 1, pFile); fread(&matVehicle.vPos.fZ, sizeof(float), 1, pFile); fread(&vecMoveSpeed.fX, sizeof(float), 1, pFile); fread(&vecMoveSpeed.fY, sizeof(float), 1, pFile); fread(&vecMoveSpeed.fZ, sizeof(float), 1, pFile); fread(&vecTurnSpeed.fX, sizeof(float), 1, pFile); fread(&vecTurnSpeed.fY, sizeof(float), 1, pFile); fread(&vecTurnSpeed.fZ, sizeof(float), 1, pFile); fread(&fHealth, sizeof(float), 1, pFile); CControllerState cs; fread(&cs, sizeof(CControllerState), 1, pFile); // Set the data pVehicle->SetMatrix(matVehicle); pVehicle->SetMoveSpeed(vecMoveSpeed); pVehicle->SetTurnSpeed(vecTurnSpeed); pVehicle->SetHealth(fHealth); // Set the controller state CControllerState csLast; g_pGame->GetPad()->Disable(true); g_pGame->GetPad()->GetCurrentControllerState(&csLast); g_pGame->GetPad()->SetLastControllerState(&csLast); g_pGame->GetPad()->SetCurrentControllerState(&cs); } } }
void CClientCamera::ToggleCameraFixedMode ( bool bEnabled ) { if ( bEnabled ) { CClientPlayer* pLocalPlayer = m_pManager->GetPlayerManager()->GetLocalPlayer (); CClientVehicle* pLocalVehicle = NULL; // Get the local vehicle, if any if ( pLocalPlayer ) pLocalVehicle = pLocalPlayer->GetOccupiedVehicle (); // Use the local vehicle, otherwise use the local player if ( pLocalVehicle ) SetFocus ( pLocalVehicle, MODE_FIXED, false ); else SetFocus ( pLocalPlayer, MODE_FIXED, false ); // Set the target position SetFocus ( &m_vecFixedPosition, false ); } else { g_pMultiplayer->SetCenterOfWorld ( NULL, NULL, NULL ); SetFocusToLocalPlayer(); m_fRoll = 0.0f; m_fFOV = 70.0f; } }
void CClientPlayerManager::DoPulse ( void ) { unsigned long ulCurrentTime = CClientTime::GetTime (); CClientPlayer * pPlayer = NULL; vector < CClientPlayer* > ::const_iterator iter = m_Players.begin (); for ( ; iter != m_Players.end (); ++iter ) { pPlayer = *iter; if ( !pPlayer->IsLocalPlayer () ) { // Pulse voice data if voice is enabled if ( g_pClientGame->GetVoiceRecorder()->IsEnabled() && pPlayer->GetVoice() ) pPlayer->GetVoice()->DoPulse(); // Flag him with connection error if its been too long since last puresync and force his position unsigned long ulLastPuresyncTime = pPlayer->GetLastPuresyncTime (); bool bHasConnectionTrouble = ( ulLastPuresyncTime != 0 && ulCurrentTime >= ulLastPuresyncTime + REMOTE_PLAYER_CONNECTION_TROUBLE_TIME ); if ( bHasConnectionTrouble && !g_pClientGame->IsDownloadingBigPacket () && !pPlayer->IsDeadOnNetwork () ) { pPlayer->SetHasConnectionTrouble ( true ); // Reset his controller so he doesn't get stuck shooting or something CControllerState State; memset ( &State, 0, sizeof ( CControllerState ) ); pPlayer->SetControllerState ( State ); // Grab his vehicle if any and force the position to where he was last sync CClientVehicle* pVehicle = pPlayer->GetOccupiedVehicle (); if ( pVehicle ) { // Is he driving the vehicle? if ( pPlayer->GetOccupiedVehicleSeat () == 0 ) { // Force his position to where he was last sync pVehicle->SetPosition ( pPlayer->GetLastPuresyncPosition () ); pVehicle->SetMoveSpeed ( CVector ( 0, 0, 0 ) ); pVehicle->SetTurnSpeed ( CVector ( 0, 0, 0 ) ); pPlayer->ResetInterpolation (); } } else { // Force his position to where he was last sync pPlayer->SetPosition ( pPlayer->GetLastPuresyncPosition () ); pPlayer->ResetInterpolation (); pPlayer->SetMoveSpeed ( CVector ( 0, 0, 0 ) ); pPlayer->ResetInterpolation (); } } else { pPlayer->SetHasConnectionTrouble ( false ); } } } }
bool CClientExplosionManager::Hook_ExplosionCreation ( CEntity* pGameExplodingEntity, CEntity* pGameCreator, const CVector& vecPosition, eExplosionType explosionType ) { CClientPlayer * pLocalPlayer = m_pManager->GetPlayerManager ()->GetLocalPlayer (); // Grab the entity responsible CClientEntity * pResponsible = NULL; CEntity* pResponsibleGameEntity = ( pGameExplodingEntity ) ? pGameExplodingEntity : pGameCreator; if ( pResponsibleGameEntity ) pResponsible = m_pManager->FindEntity ( pResponsibleGameEntity, false ); eWeaponType explosionWeaponType; switch ( explosionType ) { case EXP_TYPE_GRENADE: { // Grenade type explosions from vehicles should only be freefall bombs // TODO: need a way to check if its a freefall bomb if creator is a ped if ( pGameCreator && pGameCreator->GetEntityType () == ENTITY_TYPE_VEHICLE ) explosionWeaponType = WEAPONTYPE_FREEFALL_BOMB; else explosionWeaponType = WEAPONTYPE_GRENADE; break; } case EXP_TYPE_MOLOTOV: explosionWeaponType = WEAPONTYPE_MOLOTOV; break; case EXP_TYPE_ROCKET: case EXP_TYPE_ROCKET_WEAK: explosionWeaponType = WEAPONTYPE_ROCKET; break; case EXP_TYPE_TANK_GRENADE: explosionWeaponType = WEAPONTYPE_TANK_GRENADE; break; default: explosionWeaponType = WEAPONTYPE_EXPLOSION; break; } // Got a responsible entity? if ( pResponsible ) { // Is the local player responsible for this? bool bLocal = ( ( pResponsible == pLocalPlayer ) || ( pResponsible == pLocalPlayer->GetOccupiedVehicle () ) || ( g_pClientGame->GetUnoccupiedVehicleSync ()->Exists ( static_cast < CDeathmatchVehicle * > ( pResponsible ) ) ) ); if ( bLocal ) { CClientEntity * pOriginSource = NULL; // Is this an exploding vehicle? if ( pGameExplodingEntity && pGameExplodingEntity->GetEntityType () == ENTITY_TYPE_VEHICLE ) { // Set our origin-source to the vehicle pOriginSource = m_pManager->FindEntity ( pGameExplodingEntity, false ); } // If theres other players, sync it relative to the closest (lag compensation) else if ( m_pManager->GetPlayerManager ()->Count () > 1 ) { switch ( explosionWeaponType ) { case WEAPONTYPE_ROCKET: case WEAPONTYPE_ROCKET_HS: { CClientPlayer * pPlayer = g_pClientGame->GetClosestRemotePlayer ( vecPosition, 200.0f ); if ( pPlayer ) { pOriginSource = pPlayer; } break; } } } // Request a new explosion g_pClientGame->SendExplosionSync ( vecPosition, explosionType, pOriginSource ); } } // All explosions are handled server side return false; }
void CFoo::Test ( const char* szString ) { CClientManager* pManager = g_pClientGame->GetManager (); CClientPlayer* pLocal = pManager->GetPlayerManager ()->GetLocalPlayer (); CClientVehicleManager* pVehicleManager = pManager->GetVehicleManager (); CVector vecLocal; pLocal->GetPosition ( vecLocal ); CClientCamera* pCamera = pManager->GetCamera (); // ChrML: Trying to reproduce mantis issue #2760 if ( stricmp ( szString, "2760" ) == 0 ) { vecLocal = CVector ( 0.0f, 0.0f, 5.0f ); for ( int i = 0; i < 20; i++ ) { vecLocal.fX += 5.0f; CClientPlayer* pPlayer = new CClientPlayer ( pManager, i + 50 ); pPlayer->SetDeadOnNetwork ( false ); pPlayer->SetModel ( 168 + i ); pPlayer->AttachTo ( NULL ); pPlayer->SetFrozen ( false ); pPlayer->RemoveAllWeapons (); pPlayer->Teleport ( vecLocal ); pPlayer->SetCameraRotation ( 0 ); pPlayer->ResetInterpolation (); pPlayer->SetMoveSpeed ( CVector () ); pPlayer->SetHealth ( 100.0f ); pPlayer->SetArmor ( 0 ); pPlayer->SetCurrentRotation ( 0 ); pPlayer->SetInterior ( 0 ); pPlayer->SetDimension ( 0 ); } pLocal->SetDeadOnNetwork ( false ); pLocal->SetModel ( 145 ); pLocal->AttachTo ( NULL ); pLocal->SetFrozen ( false ); pLocal->RemoveAllWeapons (); pLocal->Teleport ( vecLocal ); pLocal->SetCameraRotation ( 0 ); pLocal->ResetInterpolation (); pLocal->SetMoveSpeed ( CVector () ); pLocal->SetHealth ( 100.0f ); pLocal->SetArmor ( 0 ); pLocal->SetCurrentRotation ( 0 ); pLocal->SetInterior ( 0 ); pLocal->SetDimension ( 0 ); g_pClientGame->SetAllDimensions ( 0 ); // Reset return position so we can't warp back to where we were if local player g_pClientGame->GetNetAPI ()->ResetReturnPosition (); // Make sure the camera is normal pCamera->SetFocusToLocalPlayer (); pCamera->FadeIn ( 0.0f ); } // Player load crash else if ( stricmp ( szString, "2741" ) == 0 ) { bFoo_PlayerLimitCrash = true; } // else if ( strnicmp ( szString, "interp", 6 ) == 0 ) { if ( pVehicleManager->Count () > 0 ) { CClientVehicle* pVehicle = *pVehicleManager->IterBegin (); float fdelta = atof ( szString + 7 ); CVector vecT; pVehicle->GetPosition ( vecT ); vecT.fZ = fdelta; pVehicle->SetTargetPosition ( vecT, TICK_RATE ); g_pCore->ChatPrintf ( "Done %f", false, fdelta ); static_cast < CDeathmatchVehicle* > ( pVehicle )->SetIsSyncing ( false ); } } // else if ( strnicmp ( szString, "interr", 6 ) == 0 ) { if ( pVehicleManager->Count () > 0 ) { CClientVehicle* pVehicle = *pVehicleManager->IterBegin (); CVector vecT; pVehicle->GetRotationDegrees ( vecT ); vecT.fZ = atof ( szString + 7 ); pVehicle->SetTargetRotation ( vecT, TICK_RATE ); g_pCore->ChatPrintf ( "Done %f", false, atof ( szString + 7 ) ); static_cast < CDeathmatchVehicle* > ( pVehicle )->SetIsSyncing ( false ); } } else if ( stricmp ( szString, "choke" ) == 0 ) { g_pClientGame->GetLocalPlayer ()->SetChoking ( true ); } // else if ( strnicmp ( szString, "static", 6 ) == 0 ) { if ( pVehicleManager->Count () > 0 ) { CClientVehicle* pVehicle = *pVehicleManager->IterBegin (); pVehicle->GetGameVehicle ()->SetRemap ( atoi ( szString + 7 ) ); g_pCore->ChatPrintf ( "Set %i", false, atoi ( szString + 7 ) ); } } // else if ( strnicmp ( szString, "getmass", 7 ) == 0 ) { CClientVehicle* pVehicle = pLocal->GetOccupiedVehicle (); if ( pVehicle ) { g_pCore->ChatPrintf ( "Mass == %f", false, pVehicle->GetGameVehicle ()->GetMass () ); } } else if ( strnicmp ( szString, "setmass", 7 ) == 0 ) { CClientVehicle* pVehicle = pLocal->GetOccupiedVehicle (); if ( pVehicle ) { pVehicle->GetGameVehicle ()->SetMass ( atof ( szString + 8 ) ); g_pCore->ChatPrintf ( "Set mass to %f", false, pVehicle->GetGameVehicle ()->GetMass () ); } } // /* else if ( strnicmp ( szString, "setmm", 5 ) == 0 ) { CClientVehicle* pVehicle = pLocal->GetOccupiedVehicle (); if ( pVehicle ) { float fVal = atof ( szString + 6); szString += 4; float* fMass = (float*) atoi ( szString + 6 ); *fMass = fVal; g_pCore->ChatPrintf ( "Set %X to %f", false, fMass, fVal ); } } */ /* else if ( stricmp ( szString, "getmm" ) == 0 ) { CClientVehicle* pVehicle = pLocal->GetOccupiedVehicle (); if ( pVehicle ) { float* fMass = (float*) atoi ( szString ); g_pCore->ChatPrintf ( "Get %f", false, *fMass ); } } */ /* else if ( stricmp ( szString, "dump" ) == 0 ) { FILE* poo = fopen ( "vehs.txt", "w+" ); if ( poo ) { tHandlingData* pHandling = (tHandlingData*) 0xC2B9E0; unsigned int uiIndex = 0; for ( ; uiIndex < 219; uiIndex++ ) { fprintf ( poo, "\n\n\n\n####### VEHICLE ID %u #######\n", uiIndex ); fprintf ( poo, "fMass = %f\n", pHandling->fMass ); fprintf ( poo, "fUnknown1 = %f\n", pHandling->fUnknown1 ); fprintf ( poo, "fTurnMass = %f\n", pHandling->fTurnMass ); fprintf ( poo, "fDragCoeff = %f\n", pHandling->fDragCoeff ); fprintf ( poo, "vecCenterOfMass = %f, %f, %f\n", pHandling->vecCenterOfMass.fX, pHandling->vecCenterOfMass.fY, pHandling->vecCenterOfMass.fZ ); fprintf ( poo, "uiPercentSubmerged = %u\n", pHandling->uiPercentSubmerged ); fprintf ( poo, "fUnknown2 = %f\n", pHandling->fUnknown2 ); fprintf ( poo, "fTractionMultiplier = %f\n", pHandling->fTractionMultiplier ); fprintf ( poo, "Transmission.fUnknown [0] = %f\n", pHandling->Transmission.fUnknown [0] ); fprintf ( poo, "Transmission.fUnknown [1] = %f\n", pHandling->Transmission.fUnknown [1] ); fprintf ( poo, "Transmission.fUnknown [2] = %f\n", pHandling->Transmission.fUnknown [2] ); fprintf ( poo, "Transmission.fUnknown [3] = %f\n", pHandling->Transmission.fUnknown [3] ); fprintf ( poo, "Transmission.fUnknown [4] = %f\n", pHandling->Transmission.fUnknown [4] ); fprintf ( poo, "Transmission.fUnknown [5] = %f\n", pHandling->Transmission.fUnknown [5] ); fprintf ( poo, "Transmission.fUnknown [6] = %f\n", pHandling->Transmission.fUnknown [6] ); fprintf ( poo, "Transmission.fUnknown [7] = %f\n", pHandling->Transmission.fUnknown [7] ); fprintf ( poo, "Transmission.fUnknown [8] = %f\n", pHandling->Transmission.fUnknown [8] ); fprintf ( poo, "Transmission.fUnknown [9] = %f\n", pHandling->Transmission.fUnknown [9] ); fprintf ( poo, "Transmission.fUnknown [10] = %f\n", pHandling->Transmission.fUnknown [10] ); fprintf ( poo, "Transmission.fUnknown [11] = %f\n", pHandling->Transmission.fUnknown [11] ); fprintf ( poo, "Transmission.fUnknown [12] = %f\n", pHandling->Transmission.fUnknown [12] ); fprintf ( poo, "Transmission.fUnknown [13] = %f\n", pHandling->Transmission.fUnknown [13] ); fprintf ( poo, "Transmission.fUnknown [14] = %f\n", pHandling->Transmission.fUnknown [14] ); fprintf ( poo, "Transmission.fUnknown [15] = %f\n", pHandling->Transmission.fUnknown [15] ); fprintf ( poo, "Transmission.fUnknown [16] = %f\n", pHandling->Transmission.fUnknown [16] ); fprintf ( poo, "Transmission.fUnknown [17] = %f\n", pHandling->Transmission.fUnknown [17] ); fprintf ( poo, "Transmission.ucDriveType = %c\n", pHandling->Transmission.ucDriveType ); fprintf ( poo, "Transmission.ucEngineType = %c\n", pHandling->Transmission.ucEngineType ); fprintf ( poo, "Transmission.ucNumberOfGears = %u\n", pHandling->Transmission.ucNumberOfGears ); fprintf ( poo, "Transmission.ucUnknown = %u\n", pHandling->Transmission.ucUnknown ); fprintf ( poo, "Transmission.uiHandlingFlags = 0x%X\n", pHandling->Transmission.uiHandlingFlags ); fprintf ( poo, "Transmission.fEngineAccelleration = %f\n", pHandling->Transmission.fEngineAccelleration ); fprintf ( poo, "Transmission.fEngineInertia = %f\n", pHandling->Transmission.fEngineInertia ); fprintf ( poo, "Transmission.fMaxVelocity = %f\n", pHandling->Transmission.fMaxVelocity ); fprintf ( poo, "Transmission.fUnknown2 [0] = %f\n", pHandling->Transmission.fUnknown2 [0] ); fprintf ( poo, "Transmission.fUnknown2 [1] = %f\n", pHandling->Transmission.fUnknown2 [1] ); fprintf ( poo, "Transmission.fUnknown2 [2] = %f\n", pHandling->Transmission.fUnknown2 [2] ); fprintf ( poo, "fBrakeDecelleration = %f\n", pHandling->fBrakeDecelleration ); fprintf ( poo, "fBrakeBias = %f\n", pHandling->fBrakeBias ); fprintf ( poo, "bABS = %u\n", pHandling->bABS ); fprintf ( poo, "fSteeringLock = %f\n", pHandling->fSteeringLock ); fprintf ( poo, "fTractionLoss = %f\n", pHandling->fTractionLoss ); fprintf ( poo, "fTractionBias = %f\n", pHandling->fTractionBias ); fprintf ( poo, "fSuspensionForceLevel = %f\n", pHandling->fSuspensionForceLevel ); fprintf ( poo, "fSuspensionDamping = %f\n", pHandling->fSuspensionDamping ); fprintf ( poo, "fSuspensionHighSpdDamping = %f\n", pHandling->fSuspensionHighSpdDamping ); fprintf ( poo, "fSuspensionUpperLimit = %f\n", pHandling->fSuspensionUpperLimit ); fprintf ( poo, "fSuspensionLowerLimit = %f\n", pHandling->fSuspensionLowerLimit ); fprintf ( poo, "fSuspensionFrontRearBias = %f\n", pHandling->fSuspensionFrontRearBias ); fprintf ( poo, "fSuspensionAntidiveMultiplier = %f\n", pHandling->fSuspensionAntidiveMultiplier ); fprintf ( poo, "fCollisionDamageMultiplier = %f\n", pHandling->fCollisionDamageMultiplier ); fprintf ( poo, "uiModelFlags = %X\n", pHandling->uiModelFlags ); fprintf ( poo, "uiHandlingFlags = %X\n", pHandling->uiHandlingFlags ); fprintf ( poo, "fSeatOffsetDistance = %f\n", pHandling->fSeatOffsetDistance ); fprintf ( poo, "uiMonetary = %u\n", pHandling->uiMonetary ); fprintf ( poo, "ucHeadLight = 0x%X\n", pHandling->ucHeadLight ); fprintf ( poo, "ucTailLight = 0x%X\n", pHandling->ucTailLight ); fprintf ( poo, "ucAnimGroup = 0x%X\n", pHandling->ucAnimGroup ); fprintf ( poo, "ucUnused = 0x%X\n", pHandling->ucUnused ); fprintf ( poo, "iUnknown7 = %f, %X\n", pHandling->iUnknown7, pHandling->iUnknown7 ); pHandling += 1; } g_pCore->ChatPrintf ( "Dumped", false ); fclose ( poo ); } } */ else if ( strnicmp ( szString, "moveug", 6 ) == 0 ) { if ( pVehicleManager->Count () > 0 ) { CClientVehicle* pVehicle = *pVehicleManager->IterBegin (); /* CClientPed* pModel = pVehicle->GetOccupant ( 0 ); if ( !pModel ) { CClientPlayer* pPlayer = new CClientPlayer ( g_pClientGame->GetManager (), 50 ); pModel = pPlayer->LoadModel ( 0 ); pModel->WarpIntoVehicle ( pVehicle ); } */ pVehicle->RemoveTargetPosition (); pVehicle->RemoveTargetRotation (); CVector vecT; pVehicle->GetPosition ( vecT ); vecT.fZ = atof ( szString + 7 ); pVehicle->SetPosition ( vecT ); g_pCore->ChatPrintf ( "Done", false ); } } else if ( strnicmp ( szString, "nocol", 5 ) == 0 ) { if ( pVehicleManager->Count () > 0 ) { CClientVehicle* pVehicle = *pVehicleManager->IterBegin (); pVehicle->SetCollisionEnabled ( false ); g_pCore->ChatPrintf ( "Done", false ); } } else if ( stricmp ( szString, "resetdamage" ) == 0 ) { g_pClientGame->GetPlayerManager ()->GetLocalPlayer ()->GetGamePlayer ()->ResetLastDamage (); } else if ( strnicmp ( szString, "fuckveh", 7 ) == 0 ) { CClientVehicle* pVehicle = pLocal->GetOccupiedVehicle (); if ( pVehicle ) { pVehicle->SetTargetPosition ( CVector ( 0, 0, 0 ), TICK_RATE ); pVehicle->SetTargetRotation ( CVector ( 0, 0, 0 ), TICK_RATE ); g_pCore->ChatPrintf ( "Done", false ); } } else if ( stricmp ( szString, "ped" ) == 0 ) { CClientPed* pPed = new CClientPed ( g_pClientGame->GetManager (), INVALID_ELEMENT_ID, 9 ); vecLocal.fX += 5.0f; pPed->SetPosition ( vecLocal ); } else if ( strnicmp ( szString, "callit", 6 ) == 0 ) { FILE* pFile = fopen ( "C:/dump.txt", "w+" ); for ( int i = 0; i < 400; i++ ) { int iIndex = i; const char* szName = NULL; _asm { mov eax, 0x4D3A30 push iIndex call eax mov szName, eax add esp, 4 } fprintf ( pFile, "%i: %s\n", iIndex, szName ); } fclose ( pFile ); } else if ( strnicmp ( szString, "veh", 3 ) == 0 ) { int i = 600; FILE* p = fopen ( "C:/dump.txt", "w+" ); for ( int a = 0; a < 13; a++ ) { g_pGame->GetModelInfo ( i )->AddRef ( true ); CVehicle* pVehicle = g_pGame->GetPools ()->AddVehicle ( (eVehicleTypes)i ); DWORD* dw2 = (DWORD*)(((DWORD)pVehicle->GetVehicleInterface ()) + 0xE1 * 4 ); DWORD dw = *dw2; dw = dw + 4; dw = dw - 0xC2B9E0; dw = dw / 224; fprintf ( p, "Array [%u] = %u;\n", i, dw ); g_pGame->GetPools ()->RemoveVehicle ( pVehicle ); fflush ( p ); g_pGame->GetModelInfo ( i )->RemoveRef ( ); i++; } fclose ( p ); } else if ( strnicmp ( szString, "groups", 6 ) == 0 ) { FILE* pFile = fopen ( "C:/dump.txt", "w+" ); int i = 0; for ( ; i < 139; i++ ) { fprintf ( pFile, "==%s [%s] (%i)==\n", pGroups [i].szGroupName, pGroups [i].szSomething, i ); int i2 = 0; for ( ; i2 < pGroups [i].ulAnimCount; i2++ ) { const char* szAnimName = pGroups [i].pAnimNames [i2]; if ( szAnimName [0] ) { fprintf ( pFile, "''%i'': %s<br>\n", i2, szAnimName ); } } fprintf ( pFile, "\n" ); } fclose ( pFile ); } else if ( strnicmp ( szString, "getshot", 7 ) == 0 ) { if ( pLocal->GetGamePlayer ()->GetCanBeShotInVehicle () ) { g_pCore->ChatEcho ( "true" ); } else { g_pCore->ChatEcho ( "false" ); } } else if ( strnicmp ( szString, "gettest", 7 ) == 0 ) { if ( pLocal->GetGamePlayer ()->GetTestForShotInVehicle () ) { g_pCore->ChatEcho ( "true" ); } else { g_pCore->ChatEcho ( "false" ); } } else if ( strnicmp ( szString, "setshot", 7 ) == 0 ) { pLocal->GetGamePlayer ()->SetCanBeShotInVehicle ( true ); } else if ( strnicmp ( szString, "settest", 8 ) == 0 ) { pLocal->GetGamePlayer ()->SetTestForShotInVehicle ( true ); } else if ( stricmp ( szString, "applytest" ) == 0 ) { DWORD oldProt, oldProt2; VirtualProtect((LPVOID)0x5E8FFB,6,PAGE_EXECUTE_READWRITE,&oldProt); *(unsigned char*) (0x5E8FFB ) = 0x90; *(unsigned char*) (0x5E8FFC ) = 0x90; *(unsigned char*) (0x5E8FFD ) = 0x90; *(unsigned char*) (0x5E8FFE ) = 0x90; *(unsigned char*) (0x5E8FFF ) = 0x90; *(unsigned char*) (0x5E9000 ) = 0x90; VirtualProtect((LPVOID)0x5E8FFB,6,oldProt,&oldProt2); } }
void CNametags::DrawFromAim() { unsigned long ulCurrentTime = CClientTime::GetTime(); // Got any players that are not local? if (m_pPlayerManager->Count() > 1) { // Grab the local player CClientPlayer* pLocalPlayer = m_pPlayerManager->GetLocalPlayer(); if (pLocalPlayer) { // Grab the current time and the camera unsigned long ulCurrentTime = CClientTime::GetTime(); CCamera* pCamera = g_pGame->GetCamera(); // Grab our controller state CControllerState State; g_pGame->GetPad()->GetCurrentControllerState(&State); // Grab our current weapon slot. Use screen center if melee or none CVector vecStart; CVector vecTarget; eWeaponSlot eSlot = pLocalPlayer->GetCurrentWeaponSlot(); if (eSlot == WEAPONSLOT_TYPE_UNARMED || eSlot == WEAPONSLOT_TYPE_MELEE || eSlot == WEAPONSLOT_TYPE_RIFLE || eSlot == WEAPONSLOT_TYPE_THROWN || eSlot == WEAPONSLOT_TYPE_SPECIAL || eSlot == WEAPONSLOT_TYPE_GIFT || eSlot == WEAPONSLOT_TYPE_PARACHUTE || eSlot == WEAPONSLOT_TYPE_DETONATOR) { // Grab the active cam CCamera* pCamera = g_pGame->GetCamera(); CCam* pActive = pCamera->GetCam(pCamera->GetActiveCam()); // Grab the camera matrix CMatrix matCamera; pCamera->GetMatrix(&matCamera); vecStart = matCamera.vPos; // Range float fRange; eWeaponType eWeapon = pLocalPlayer->GetCurrentWeaponType(); float fSkill = pLocalPlayer->GetStat(g_pGame->GetStats()->GetSkillStatIndex(eWeapon)); CWeaponStat* pWeaponStat = g_pGame->GetWeaponStatManager()->GetWeaponStatsFromSkillLevel(eWeapon, fSkill); if (pWeaponStat) { fRange = pWeaponStat->GetTargetRange(); } else { fRange = MELEE_VISIBLE_RANGE; } // Find the target position CVector vecFront = *pActive->GetFront(); vecFront.Normalize(); vecTarget = *pActive->GetSource() + vecFront * fRange; } else { // Grab the weapon and keysync state. If it exists and he holds Target down CWeapon* pPlayerWeapon = pLocalPlayer->GetWeapon(); if (pPlayerWeapon && State.RightShoulder1) { // Grab the gun muzzle position eWeaponType eWeapon = pLocalPlayer->GetCurrentWeaponType(); float fSkill = pLocalPlayer->GetStat(g_pGame->GetStats()->GetSkillStatIndex(eWeapon)); CWeaponStat* pWeaponStat = g_pGame->GetWeaponStatManager()->GetWeaponStatsFromSkillLevel(eWeapon, fSkill); CVector vecGunMuzzle = *pWeaponStat->GetFireOffset(); pLocalPlayer->GetTransformedBonePosition(BONE_RIGHTWRIST, vecGunMuzzle); // Grab the target point pCamera->Find3rdPersonCamTargetVector(AIM_VISIBLE_RANGE, &vecGunMuzzle, &vecStart, &vecTarget); } else { // Grab the active cam CCam* pActive = pCamera->GetCam(pCamera->GetActiveCam()); // Grab the camera matrix CMatrix matCamera; pCamera->GetMatrix(&matCamera); vecStart = matCamera.vPos; // Find the target position CVector vecFront = *pActive->GetFront(); vecFront.Normalize(); vecTarget = *pActive->GetSource() + vecFront * MELEE_VISIBLE_RANGE; } } // Ignore the local player for this pLocalPlayer->WorldIgnore(true); // Do the raycast CColPoint* pColPoint = NULL; CEntity* pEntity = NULL; SLineOfSightFlags flags; flags.bCheckBuildings = true; flags.bCheckVehicles = true; flags.bCheckPeds = true; flags.bCheckObjects = true; flags.bCheckDummies = true; flags.bSeeThroughStuff = true; flags.bIgnoreSomeObjectsForCamera = false; flags.bShootThroughStuff = true; g_pGame->GetWorld()->ProcessLineOfSight(&vecStart, &vecTarget, &pColPoint, &pEntity, flags); if (pColPoint) pColPoint->Destroy(); // Un-ignore the local player pLocalPlayer->WorldIgnore(false); // Did we find an entity? if (pEntity) { // Grab the CClientEntity belonging to this game_sa entity CClientEntity* pClientEntity = reinterpret_cast<CClientEntity*>(pEntity->GetStoredPointer()); if (pClientEntity) { // Is it a vehicle? Is it a ped? eClientEntityType EntityType = pClientEntity->GetType(); if (EntityType == CCLIENTVEHICLE) { CClientVehicle* pClientVehicle = static_cast<CClientVehicle*>(pClientEntity); // Set the current time as the last draw time for all players inside CClientPed* pPed; int i; for (i = 0; i < 8; i++) { // Grab this seat's occupant and set its last nametag show time to now pPed = pClientVehicle->GetOccupant(i); if (pPed && pPed->GetType() == CCLIENTPLAYER) { static_cast<CClientPlayer*>(pPed)->SetLastNametagShow(ulCurrentTime); } } } else if (EntityType == CCLIENTPLAYER) { // Grab the player this entity is CClientPlayer* pClientPlayer = static_cast<CClientPlayer*>(pClientEntity); if (pClientPlayer) { // Set now as the last time we had the cursor above him pClientPlayer->SetLastNametagShow(ulCurrentTime); } } } } // Grab the local player vehicle CClientVehicle* pLocalVehicle = pLocalPlayer->GetOccupiedVehicle(); // Draw the nametags we need to CClientPlayer* pPlayer; CClientStreamElement* pElement; list<CClientStreamElement*>::const_iterator iter = m_pPlayerStreamer->ActiveElementsBegin(); for (; iter != m_pPlayerStreamer->ActiveElementsEnd(); ++iter) { pElement = *iter; if (!pElement->IsStreamedIn()) continue; if (pElement->GetType() != CCLIENTPLAYER) continue; pPlayer = static_cast<CClientPlayer*>(pElement); if (pPlayer->IsLocalPlayer()) continue; // Is he in the same vehicle as the local player? if (pLocalVehicle && pPlayer->GetOccupiedVehicle() == pLocalVehicle) { pPlayer->SetLastNametagShow(ulCurrentTime); } // Can we show this player's nametag unsigned long ulLastNametagShow = pPlayer->GetLastNametagShow(); if (ulLastNametagShow != 0 && ulCurrentTime <= ulLastNametagShow + NAMETAG_END_FADE_TIME) { unsigned long ulLastNametagShow = pPlayer->GetLastNametagShow(); // Calculate the alpha modifier float fAlphaTimeModifier; if (ulCurrentTime < ulLastNametagShow + NAMETAG_BEGIN_FADE_TIME) { fAlphaTimeModifier = 1.0f; } else { fAlphaTimeModifier = 1.0f - (ulCurrentTime - ulLastNametagShow - NAMETAG_BEGIN_FADE_TIME) / 1000.0f; } // Calculate the alpha for the nametag unsigned char ucAlpha = static_cast<unsigned char>(180.0f * fAlphaTimeModifier); // Draw it DrawTagForPlayer(pPlayer, ucAlpha); } } } } }
void CNametags::DrawDefault() { // Grab the resolution width and height static float fResWidth = static_cast<float>(g_pCore->GetGraphics()->GetViewportWidth()); static float fResHeight = static_cast<float>(g_pCore->GetGraphics()->GetViewportHeight()); // Got any players that are not local? if (m_pPlayerManager->Count() <= 1) return; list<CClientPlayer*> playerTags; // Grab the local player CClientPlayer* pLocalPlayer = m_pPlayerManager->GetLocalPlayer(); if (!pLocalPlayer) return; CClientVehicle* pSniperTargetedVehicle = NULL; CClientPlayer* pSniperTargetedPlayer = NULL; // Grab our current weapon slot. Use screen center if melee or none eWeaponSlot eSlot = pLocalPlayer->GetCurrentWeaponSlot(); if (eSlot >= WEAPONSLOT_TYPE_HANDGUN && eSlot <= WEAPONSLOT_TYPE_RIFLE) { CVector vecOrigin, vecTarget; pLocalPlayer->GetShotData(&vecOrigin, &vecTarget); // Ignore the local player for this pLocalPlayer->WorldIgnore(true); // Do the raycast CColPoint* pColPoint = NULL; CEntity* pEntity = NULL; SLineOfSightFlags flags; flags.bCheckBuildings = true; flags.bCheckVehicles = true; flags.bCheckPeds = true; flags.bCheckObjects = true; flags.bCheckDummies = true; flags.bSeeThroughStuff = true; flags.bIgnoreSomeObjectsForCamera = false; flags.bShootThroughStuff = true; g_pGame->GetWorld()->ProcessLineOfSight(&vecOrigin, &vecTarget, &pColPoint, &pEntity, flags); if (pColPoint) pColPoint->Destroy(); // Un-ignore the local player pLocalPlayer->WorldIgnore(false); // Did we find an entity? if (pEntity) { // Grab the CClientEntity belonging to this game_sa entity CClientEntity* pClientEntity = reinterpret_cast<CClientEntity*>(pEntity->GetStoredPointer()); if (pClientEntity) { // Is it a vehicle? Is it a ped? eClientEntityType EntityType = pClientEntity->GetType(); switch (EntityType) { case CCLIENTVEHICLE: { pSniperTargetedVehicle = static_cast<CClientVehicle*>(pClientEntity); break; } case CCLIENTPLAYER: { pSniperTargetedPlayer = static_cast<CClientPlayer*>(pClientEntity); break; } default: break; } } } } // Grab the local player vehicle CClientVehicle* pLocalVehicle = pLocalPlayer->GetOccupiedVehicle(); CVehicle* pLocalGameVehicle = NULL; if (pLocalVehicle) pLocalGameVehicle = pLocalVehicle->GetGameVehicle(); CMatrix CameraMatrix; g_pGame->GetCamera()->GetMatrix(&CameraMatrix); // Remove collision from our local vehicle (if we have one) if (pLocalVehicle) pLocalVehicle->WorldIgnore(true); // Draw the nametags we need to CVector vecPlayerPosition; CClientVehicle* pPlayerVehicle = NULL; float fDistanceExp; bool bCollision; CColPoint* pColPoint = NULL; CEntity* pGameEntity = NULL; CClientEntity* pEntity = NULL; CClientPlayer* pPlayer; CClientStreamElement* pElement; list<CClientStreamElement*>::const_iterator iter = m_pPlayerStreamer->ActiveElementsBegin(); for (; iter != m_pPlayerStreamer->ActiveElementsEnd(); ++iter) { pElement = *iter; if (!pElement->IsStreamedIn()) continue; if (pElement->GetType() != CCLIENTPLAYER) continue; pPlayer = static_cast<CClientPlayer*>(pElement); if (pPlayer->IsLocalPlayer()) continue; // Get the distance from the camera pPlayer->GetPosition(vecPlayerPosition); fDistanceExp = pPlayer->GetExpDistance(); pPlayerVehicle = pPlayer->GetOccupiedVehicle(); // Is he in the same vehicle as the local player? if ((pSniperTargetedPlayer == pPlayer) || (pSniperTargetedVehicle && pSniperTargetedVehicle == pPlayerVehicle) || (pLocalVehicle && pLocalVehicle == pPlayerVehicle) || (fDistanceExp < DEFAULT_VIEW_RANGE_EXP && pPlayer->IsOnScreen())) { SLineOfSightFlags flags; flags.bCheckBuildings = true; flags.bCheckVehicles = true; flags.bCheckPeds = false; flags.bCheckObjects = true; bCollision = g_pCore->GetGame()->GetWorld()->ProcessLineOfSight(&CameraMatrix.vPos, &vecPlayerPosition, &pColPoint, &pGameEntity, flags); if (!bCollision || (pGameEntity && pPlayerVehicle && pGameEntity == pPlayerVehicle->GetGameEntity())) { pPlayer->SetNametagDistance(sqrt(fDistanceExp)); playerTags.push_front(pPlayer); } // Destroy the colpoint if (pColPoint) pColPoint->Destroy(); } } // Readd collision from our local vehicle (if we have one) if (pLocalVehicle) pLocalVehicle->WorldIgnore(false); // Draw each player's nametag float fAlphaModifier; unsigned char ucAlpha; float fDistance; list<CClientPlayer*>::iterator iterTags = playerTags.begin(); for (; iterTags != playerTags.end(); ++iterTags) { pPlayer = *iterTags; fDistance = pPlayer->GetNametagDistance(); static float fFullAlphaDistance = 7.0f; if ((fDistance < fFullAlphaDistance) || (pSniperTargetedPlayer && pSniperTargetedPlayer == pPlayer) || (pSniperTargetedVehicle && pSniperTargetedVehicle == pPlayer->GetOccupiedVehicle())) { fAlphaModifier = 1.0f; } else { fAlphaModifier = 1.0f - ((fDistance - fFullAlphaDistance) / (DEFAULT_VIEW_RANGE - fFullAlphaDistance)); } // Calculate the alpha for the nametag ucAlpha = static_cast<unsigned char>(180.0f * fAlphaModifier); // Draw the tag DrawTagForPlayer(pPlayer, ucAlpha); } }
bool CClientProjectileManager::Hook_ProjectileAllow ( CEntity * pGameCreator, eWeaponType weaponType, CVector * origin, float fForce, CVector * target, CEntity * targetEntity ) { // Called before projectile creation, we need to decide to allow or cancel it here // Is this a local projectile? CClientPlayer * pLocalPlayer = m_pManager->GetPlayerManager ()->GetLocalPlayer (); // Store the creator/local variables for the next stage m_pCreator = m_pManager->FindEntity ( pGameCreator, true ); m_bIsLocal = ( m_pCreator == pLocalPlayer || ( pLocalPlayer->GetOccupiedVehicleSeat () == 0 && m_pCreator == pLocalPlayer->GetOccupiedVehicle () ) ); return ( m_bCreating || m_bIsLocal ); }
/////////////////////////////////////////////////////////////// // // CClientModelCacheManagerImpl::ProcessPlayerList // /////////////////////////////////////////////////////////////// void CClientModelCacheManagerImpl::ProcessPlayerList(std::map<ushort, float>& outNeedCacheList, const std::vector<CClientPlayer*>& playerList, float fMaxStreamDistanceSq) { const ulong ulTimeNow = CClientTime::GetTime(); for (std::vector<CClientPlayer*>::const_iterator iter = playerList.begin(); iter != playerList.end(); ++iter) { CClientPlayer* pPlayer = *iter; ushort usModelId = (ushort)pPlayer->GetModel(); if (usModelId < 7 || usModelId > 312) continue; // Check if currently within distance { // Check distance CVector vecPosition; pPlayer->GetPosition(vecPosition); float fDistSq = (m_vecCameraPos - vecPosition).LengthSquared(); if (fDistSq < fMaxStreamDistanceSq) { // Add model to needed list InsertIntoNeedCacheList(outNeedCacheList, usModelId, fDistSq); AddProcessStat("p", true, PURESYNC_TYPE_NONE, usModelId, vecPosition, vecPosition); continue; } } // Check if will be within distance soon ePuresyncType syncType = pPlayer->GetLastPuresyncType(); if (syncType == PURESYNC_TYPE_PURESYNC || syncType == PURESYNC_TYPE_LIGHTSYNC) { ulong ulSyncAge = ulTimeNow - pPlayer->GetLastPuresyncTime(); if (ulSyncAge < 8000) { // Get velocity from somewhere CVector vecVelocity; CClientVehicle* pVehicle = pPlayer->GetOccupiedVehicle(); if (syncType == PURESYNC_TYPE_LIGHTSYNC) { vecVelocity = pPlayer->GetLightsyncCalcedVelocity(); } else { if (pVehicle) pVehicle->GetMoveSpeed(vecVelocity); else pPlayer->GetMoveSpeed(vecVelocity); vecVelocity *= m_fGameFps; } // Extrapolate position float fSecondsToAdd = std::min(6000UL, ulSyncAge + 2000) * 0.001f; CVector vecPosition; pPlayer->GetPosition(vecPosition); CVector vecNewPosition = vecPosition + vecVelocity * fSecondsToAdd; // Check distance float fDistSq = (m_vecCameraPos - vecNewPosition).LengthSquared(); if (fDistSq < fMaxStreamDistanceSq) { // Add model to needed list InsertIntoNeedCacheList(outNeedCacheList, usModelId, fDistSq); AddProcessStat("l", true, syncType, usModelId, vecPosition, vecNewPosition); continue; } AddProcessStat("n", false, syncType, usModelId, vecPosition, vecNewPosition); continue; } } } }