CUtlString CUtlString::Replace( const char *pszFrom, const char *pszTo ) const { Assert( pszTo ); // Can be 0 length, but not null Assert( pszFrom && *pszFrom ); // Must be valid and have one character. const char *pos = V_strstr( String(), pszFrom ); if ( !pos ) { return *this; } const char *pFirstFound = pos; // count number of search string int nSearchCount = 0; int nSearchLength = V_strlen( pszFrom ); while ( pos ) { nSearchCount++; int nSrcOffset = ( pos - String() ) + nSearchLength; pos = V_strstr( String() + nSrcOffset, pszFrom ); } // allocate the new string int nReplaceLength = V_strlen( pszTo ); int nAllocOffset = nSearchCount * ( nReplaceLength - nSearchLength ); size_t srcLength = Length(); CUtlString strDest; size_t destLength = srcLength + nAllocOffset; strDest.SetLength( destLength ); // find and replace the search string pos = pFirstFound; int nDestOffset = 0; int nSrcOffset = 0; while ( pos ) { // Found an instance int nCurrentSearchOffset = pos - String(); int nCopyLength = nCurrentSearchOffset - nSrcOffset; V_strncpy( strDest.GetForModify() + nDestOffset, String() + nSrcOffset, nCopyLength + 1 ); nDestOffset += nCopyLength; V_strncpy( strDest.GetForModify() + nDestOffset, pszTo, nReplaceLength + 1 ); nDestOffset += nReplaceLength; nSrcOffset = nCurrentSearchOffset + nSearchLength; pos = V_strstr( String() + nSrcOffset, pszFrom ); } // making sure that the left over string from the source is the same size as the left over dest buffer Assert( destLength - nDestOffset == srcLength - nSrcOffset ); if ( destLength - nDestOffset > 0 ) { V_strncpy( strDest.GetForModify() + nDestOffset, String() + nSrcOffset, destLength - nDestOffset + 1 ); } return strDest; }
bool SizzlingProtect::IsChatExploit( const CCommand &args, int ClientCommandIndex ) { const char *pChar = V_strstr( args.ArgS(), "%" ); while ( pChar ) { if ( !IsValidString(&pChar) ) { return true; } pChar = V_strstr( pChar, "%" ); } return false; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool C_SceneEntity::GetHWMorphSceneFileName( const char *pFilename, char *pHWMFilename ) { // Are we even using hardware morph? if ( !UseHWMorphVCDs() ) return false; // Multi-player only! if ( !m_bMultiplayer ) return false; // Do we have a valid filename? if ( !( pFilename && pFilename[0] ) ) return false; // Check to see if we already have an player/hwm/* filename. if ( ( V_strstr( pFilename, "/high" ) != NULL ) || ( V_strstr( pFilename, "\\high" ) != NULL ) ) { V_strcpy( pHWMFilename, pFilename ); return true; } // Find the hardware morph scene name and pass that along as well. char szScene[MAX_PATH]; V_strcpy( szScene, pFilename ); char szSceneHWM[MAX_PATH]; szSceneHWM[0] = '\0'; char *pszToken = strtok( szScene, "/\\" ); while ( pszToken != NULL ) { if ( !V_stricmp( pszToken, "low" ) ) { V_strcat( szSceneHWM, "high", sizeof( szSceneHWM ) ); } else { V_strcat( szSceneHWM, pszToken, sizeof( szSceneHWM ) ); } pszToken = strtok( NULL, "/\\" ); if ( pszToken != NULL ) { V_strcat( szSceneHWM, "\\", sizeof( szSceneHWM ) ); } } V_strcpy( pHWMFilename, szSceneHWM ); return true; }
static void FileSystem_AddLoadedSearchPath( CFSSearchPathsInit &initInfo, const char *pPathID, const char *fullLocationPath, bool bLowViolence ) { // Check for mounting LV game content in LV builds only if ( V_stricmp( pPathID, "game_lv" ) == 0 ) { // Not in LV build, don't mount if ( !initInfo.m_bLowViolence ) return; // Mount, as a game path pPathID = "game"; } // Check for mounting HD game content if enabled if ( V_stricmp( pPathID, "game_hd" ) == 0 ) { // Not in LV build, don't mount if ( !initInfo.m_bMountHDContent ) return; // Mount, as a game path pPathID = "game"; } // Special processing for ordinary game folders if ( V_stristr( fullLocationPath, ".vpk" ) == NULL && Q_stricmp( pPathID, "game" ) == 0 ) { if ( CommandLine()->FindParm( "-tempcontent" ) != 0 ) { char szPath[MAX_PATH]; Q_snprintf( szPath, sizeof(szPath), "%s_tempcontent", fullLocationPath ); initInfo.m_pFileSystem->AddSearchPath( szPath, pPathID, PATH_ADD_TO_TAIL ); } } if ( initInfo.m_pLanguage && Q_stricmp( initInfo.m_pLanguage, "english" ) && V_strstr( fullLocationPath, "_english" ) != NULL ) { char szPath[MAX_PATH]; char szLangString[MAX_PATH]; // Need to add a language version of this path first Q_snprintf( szLangString, sizeof(szLangString), "_%s", initInfo.m_pLanguage); V_StrSubst( fullLocationPath, "_english", szLangString, szPath, sizeof( szPath ), true ); initInfo.m_pFileSystem->AddSearchPath( szPath, pPathID, PATH_ADD_TO_TAIL ); } initInfo.m_pFileSystem->AddSearchPath( fullLocationPath, pPathID, PATH_ADD_TO_TAIL ); }
int CSizzPluginContext::GetPluginIndex( const char *pszDescriptionPart ) const { if (pszDescriptionPart) { int num_plugins = m_pPluginManager->m_plugins.Count(); for ( int i = 0; i < num_plugins; ++i ) { CPlugin *pPlugin = m_pPluginManager->m_plugins[i]; if (pPlugin && V_strstr(pPlugin->m_szName, pszDescriptionPart)) { return i; } } } return -1; }
void CReplayBrowserBasePage::OnCommand( const char *pCommand ) { // User wants details on a replay? if ( !V_strnicmp( pCommand, "details", 7 ) ) { // Get rid of preview panel m_pReplayList->ClearPreviewPanel(); QueryableReplayItemHandle_t hReplayItem = (QueryableReplayItemHandle_t)atoi( pCommand + 7 ); IReplayItemManager *pItemManager; IQueryableReplayItem *pReplayItem = FindReplayItem( hReplayItem, &pItemManager ); Assert( pReplayItem ); if ( pReplayItem ) { // Get performance int iPerformance = -1; const char *pPerformanceStr = V_strstr( pCommand + 8, "_" ); if ( pPerformanceStr ) { iPerformance = atoi( pPerformanceStr + 1 ); } m_hReplayDetailsPanel = vgui::SETUP_PANEL( new CReplayDetailsPanel( this, hReplayItem, iPerformance, pItemManager ) ); m_hReplayDetailsPanel->SetVisible( true ); m_hReplayDetailsPanel->MoveToFront(); m_pReplayList->SetVisible( false ); surface()->PlaySound( "replay\\showdetails.wav" ); } } // "back" button was hit in details panel? else if ( FStrEq( pCommand, "back" ) ) { GoBack(); } BaseClass::OnCommand( pCommand ); }
//----------------------------------------------------------------------------- // Returns an address from the given PlayerInfo instance. //----------------------------------------------------------------------------- bool AddressFromPlayerInfo2( IPlayerInfo* pInfo, const char*& output ) { if (!pInfo) return false; if (pInfo->IsFakeClient() || V_strstr(pInfo->GetNetworkIDString(), "BOT")) { output = ""; return true; } unsigned int index; if (!IndexFromPlayerInfo(pInfo, index)) return false; INetChannelInfo* netinfo = engine->GetPlayerNetInfo(index); if (!netinfo) return false; output = netinfo->GetAddress(); return true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool Impact( Vector &vecOrigin, Vector &vecStart, int iMaterial, int iDamageType, int iHitbox, C_BaseEntity *pEntity, trace_t &tr, int nFlags, int maxLODToDecal ) { VPROF( "Impact" ); Assert ( pEntity ); // Clear out the trace memset( &tr, 0, sizeof(trace_t)); tr.fraction = 1.0f; // Setup our shot information Vector shotDir = vecOrigin - vecStart; float flLength = VectorNormalize( shotDir ); Vector traceExt; VectorMA( vecStart, flLength + 8.0f, shotDir, traceExt ); // Attempt to hit ragdolls bool bHitRagdoll = false; if ( !pEntity->IsClientCreated() ) { bHitRagdoll = FX_AffectRagdolls( vecOrigin, vecStart, iDamageType ); } if ( (nFlags & IMPACT_NODECAL) == 0 ) { const char *pchDecalName = GetImpactDecal( pEntity, iMaterial, iDamageType ); int decalNumber = decalsystem->GetDecalIndexForName( pchDecalName ); if ( decalNumber == -1 ) return false; bool bSkipDecal = false; #ifdef TF_CLIENT_DLL // Don't show blood decals if we're filtering them out (Pyro Goggles) if ( IsLocalPlayerUsingVisionFilterFlags( TF_VISION_FILTER_PYRO ) || UTIL_IsLowViolence() ) { if ( V_strstr( pchDecalName, "Flesh" ) ) { bSkipDecal = true; } } #endif // (davideo): don't show blood decals on the player model, makes the mutant too visible if ( V_strstr( pchDecalName, "Flesh" ) ) { bSkipDecal = true; } if ( !bSkipDecal ) { if ( (pEntity->entindex() == 0) && (iHitbox != 0) ) { staticpropmgr->AddDecalToStaticProp( vecStart, traceExt, iHitbox - 1, decalNumber, true, tr ); } else if ( pEntity ) { // Here we deal with decals on entities. pEntity->AddDecal( vecStart, traceExt, vecOrigin, iHitbox, decalNumber, true, tr, maxLODToDecal ); } } } else { // Perform the trace ourselves Ray_t ray; ray.Init( vecStart, traceExt ); if ( (pEntity->entindex() == 0) && (iHitbox != 0) ) { // Special case for world entity with hitbox (that's a static prop) ICollideable *pCollideable = staticpropmgr->GetStaticPropByIndex( iHitbox - 1 ); enginetrace->ClipRayToCollideable( ray, MASK_SHOT, pCollideable, &tr ); } else { if ( !pEntity ) return false; enginetrace->ClipRayToEntity( ray, MASK_SHOT, pEntity, &tr ); } } // If we found the surface, emit debris flecks bool bReportRagdollImpacts = (nFlags & IMPACT_REPORT_RAGDOLL_IMPACTS) != 0; if ( ( tr.fraction == 1.0f ) || ( bHitRagdoll && !bReportRagdollImpacts ) ) return false; return true; }