//------------------------------------------------------------------------- ECryLobbyError CGameBrowser::StartSearchingForServers(SCrySessionSearchParam* param, CryMatchmakingSessionSearchCallback cb, void* cbArg, const bool bFavouriteIdSearch) { m_bFavouriteIdSearch = bFavouriteIdSearch; m_delayedSearchType = eDST_None; m_lastSearchTime = gEnv->pTimer->GetCurrTime(); #if defined(USE_SESSION_SEARCH_SIMULATOR) if( m_pSessionSearchSimulator && gEnv->pConsole->GetCVar( "gl_searchSimulatorEnabled" )->GetIVal() ) { const char* filepath = gEnv->pConsole->GetCVar( "gl_searchSimulatorFilepath" )->GetString(); if( filepath != NULL && strcmpi( filepath, m_pSessionSearchSimulator->GetCurrentFilepath() ) != 0 ) { m_pSessionSearchSimulator->OpenSessionListXML( filepath ); } m_pSessionSearchSimulator->OutputSessionListBlock( m_searchingTask, cb, cbArg ); return eCLE_Success; } else #endif //defined(USE_SESSION_SEARCH_SIMULATOR) { ECryLobbyError error = eCLE_ServiceNotSupported; ICryLobby *lobby = gEnv->pNetwork->GetLobby(); IPlayerProfileManager *pPlayerProfileManager = gEnv->pGame->GetIGameFramework()->GetIPlayerProfileManager(); uint32 userIndex = pPlayerProfileManager ? pPlayerProfileManager->GetExclusiveControllerDeviceIndex() : 0; if(lobby) { CryLobbyTaskID previousTask = m_searchingTask; error = lobby->GetLobbyService()->GetMatchMaking()->SessionSearch(userIndex, param, &m_searchingTask, cb, cbArg); CryLog("CGameBrowser::StartSearchingForServers previousTask=%u, newTask=%u", previousTask, m_searchingTask); } return error; } }
void CGameLobbyManager::ChatRestrictedCallback(UCryLobbyEventData eventData, void *arg) { SCryLobbyChatRestrictedData *pChatRestrictedData = eventData.pChatRestrictedData; if(pChatRestrictedData) { CryLog("[GameLobbyManager] ChatRestrictedCallback user %d isChatRestricted %d", pChatRestrictedData->m_user, pChatRestrictedData->m_chatRestricted); CGameLobbyManager *pGameLobbyManager = (CGameLobbyManager*)arg; CRY_ASSERT(pGameLobbyManager); IPlayerProfileManager *pPlayerProfileManager = gEnv->pGame->GetIGameFramework()->GetIPlayerProfileManager(); uint32 userIndex = pPlayerProfileManager ? pPlayerProfileManager->GetExclusiveControllerDeviceIndex() : 0; if(pChatRestrictedData->m_user == userIndex) { pGameLobbyManager->m_isChatRestricted = pChatRestrictedData->m_chatRestricted; } } }
void CDLCManager::LoadDownloadableContent( uint32 userIdOveride /*= INVALID_CONTROLLER_INDEX*/ ) { if( m_dlcLoaded || !m_bContentAvailable ) { return; } const ICmdLineArg *pNoDLCArg = gEnv->pSystem->GetICmdLine()->FindArg(eCLAT_Pre, "nodlc"); if (pNoDLCArg != NULL) { return; } // SECRET uint8 keyData[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // SECRET uint32 userIndex; if( userIdOveride != INVALID_CONTROLLER_INDEX ) { userIndex = userIdOveride; } else { IPlayerProfileManager *pPlayerProfileManager = gEnv->pGame->GetIGameFramework()->GetIPlayerProfileManager(); userIndex = pPlayerProfileManager ? pPlayerProfileManager->GetExclusiveControllerDeviceIndex() : INVALID_CONTROLLER_INDEX; } if( userIndex != INVALID_CONTROLLER_INDEX ) { gEnv->pSystem->GetPlatformOS()->MountDLCContent(this, userIndex, keyData); m_dlcLoaded = true; } }
//Handles online state changes - when you sign out it returns you void CGameLobbyManager::OnlineCallback(UCryLobbyEventData eventData, void *arg) { if (g_pGameCVars->g_ProcessOnlineCallbacks == 0) return; if(eventData.pOnlineStateData) { CGameLobbyManager *pLobbyManager = static_cast<CGameLobbyManager*>(arg); CRY_ASSERT(eventData.pOnlineStateData->m_user < MAX_LOCAL_USERS); pLobbyManager->m_onlineState[eventData.pOnlineStateData->m_user] = eventData.pOnlineStateData->m_curState; IPlayerProfileManager *pPlayerProfileManager = gEnv->pGame->GetIGameFramework()->GetIPlayerProfileManager(); uint32 userIndex = pPlayerProfileManager ? pPlayerProfileManager->GetExclusiveControllerDeviceIndex() : 0; #ifndef _RELEASE const char *pEventType = "eOS_Unknown"; if (eventData.pOnlineStateData->m_curState == eOS_SignedOut) { pEventType = "eOS_SignedOut"; } else if (eventData.pOnlineStateData->m_curState == eOS_SigningIn) { pEventType = "eOS_SigningIn"; } else if (eventData.pOnlineStateData->m_curState == eOS_SignedIn) { pEventType = "eOS_SignedIn"; } CryLog("[GameLobbyManager] OnlineCallback: eventType=%s, user=%u, currentUser=%u", pEventType, eventData.pOnlineStateData->m_user, userIndex); ICryLobby *pLobby = gEnv->pNetwork->GetLobby(); if (g_pGameCVars->autotest_enabled && pLobby != NULL && (pLobby->GetLobbyServiceType() == eCLS_LAN)) { // Don't care about signing out if we're in the autotester and in LAN mode return; } #endif { EOnlineState onlineState = eventData.pOnlineStateData->m_curState; if(onlineState == eOS_SignedOut) { if(eventData.pOnlineStateData->m_reason != eCLE_CyclingForInvite) { #ifdef USE_C2_FRONTEND CFlashFrontEnd *pFlashFrontEnd = g_pGame->GetFlashMenu(); CMPMenuHub *pMPMenuHub = pFlashFrontEnd ? pFlashFrontEnd->GetMPMenu() : NULL; if(pMPMenuHub) { #if INCLUDE_DEDICATED_LEADERBOARDS pFlashFrontEnd->ClearDelaySessionLeave(); #endif pMPMenuHub->OnlineStateChanged(eventData.pOnlineStateData->m_curState, eventData.pOnlineStateData->m_reason, eventData.pOnlineStateData->m_serviceConnected); } #endif //#ifdef USE_C2_FRONTEND #if !defined(XENON) && !defined(PS3) IPlayerProfileManager *pPPM = gEnv->pGame->GetIGameFramework()->GetIPlayerProfileManager(); if(pPPM) { pPPM->ClearOnlineAttributes(); } #endif #ifdef GAME_IS_CRYSIS2 CWarningsManager *pWM = g_pGame->GetWarnings(); if(pWM) { pWM->RemoveWarning("ChatRestricted"); } #endif } pLobbyManager->LeaveGameSession(eLSR_SignedOut); } } } }
void CGameBrowser::ConfigurationCallback(ECryLobbyService service, SConfigurationParams *requestedParams, uint32 paramCount) { uint32 a; for (a=0;a<paramCount;a++) { switch (requestedParams[a].m_fourCCID) { case CLCC_LAN_USER_NAME: { IPlayerProfileManager *pPlayerProfileManager = gEnv->pGame->GetIGameFramework()->GetIPlayerProfileManager(); uint32 userIndex = pPlayerProfileManager ? pPlayerProfileManager->GetExclusiveControllerDeviceIndex() : 0; IPlatformOS *pPlatformOS = gEnv->pSystem->GetPlatformOS(); IPlatformOS::TUserName tUserName = ""; if(pPlatformOS) { pPlatformOS->UserGetName(userIndex, tUserName); } // this will null terminate for us if necessary cry_strncpy(s_profileName, tUserName.c_str(), CRYLOBBY_USER_NAME_LENGTH); requestedParams[a].m_pData = s_profileName; } break; #if defined(PS3) || USE_CRYLOBBY_GAMESPY case CLCC_CRYLOBBY_PRESENCE_CONVERTER: { SCryLobbyPresenceConverter* pConverter = (SCryLobbyPresenceConverter*)requestedParams[a].m_pData; if (pConverter) { //-- Use the pConverter->m_numData data items in pConverter->m_pData to create a string in pConverter->m_pStringBuffer //-- Use the initial value of pConverter->sizeOfStringBuffer as a maximum string length allowed, but //-- update pConverter->sizeOfStringBuffer to the correct length when the string is filled in. //-- Set pConverter->sizeOfStringBuffer = 0 to invalidate bad data so it isn't sent to PSN. CryFixedStringT<MAX_PRESENCE_STRING_SIZE> strPresence; if(CreatePresenceString(strPresence, pConverter->m_pData, pConverter->m_numData)) { CryLog("[RichPresence] Succeeded %s", strPresence.c_str()); sprintf((char*)pConverter->m_pStringBuffer, "%s", strPresence.c_str()); pConverter->m_sizeOfStringBuffer = strlen((char*)pConverter->m_pStringBuffer); } else { CryLog("[RichPresence] Failed to create rich presence string"); pConverter->m_sizeOfStringBuffer = 0; } } } break; #endif #if USE_CRYLOBBY_GAMESPY // The following GameSpy data are always available. case CLCC_GAMESPY_TITLE: requestedParams[ a ].m_pData = ObfuscateGameSpyTitle(); break; case CLCC_GAMESPY_SECRETKEY: requestedParams[ a ].m_pData = ObfuscateGameSpySecretKey(); break; case CLCC_GAMESPY_GAMEVERSION: requestedParams[ a ].m_32 = GameLobbyData::GetVersion(); break; case CLCC_GAMESPY_GAMEVERSIONSTRING: requestedParams[ a ].m_pData = ( void* )GAMESPY_GAMEVERSIONSTRING; break; case CLCC_GAMESPY_DISTRIBUTIONID: requestedParams[ a ].m_32 = GAMESPY_DISTRIBUTIONID; break; case CLCC_GAMESPY_PRODUCTID: requestedParams[ a ].m_32 = GAMESPY_PRODUCTID; break; case CLCC_GAMESPY_GAMEID: requestedParams[ a ].m_32 = GAMESPY_GAMEID; break; case CLCC_GAMESPY_NAMESPACEID: requestedParams[ a ].m_32 = GAMESPY_NAMESPACEID; break; case CLCC_GAMESPY_PARTNERID: requestedParams[ a ].m_32 = GAMESPY_PARTNERID; break; case CLCC_GAMESPY_REQUIREDNICK: requestedParams[ a ].m_pData = GAMESPY_REQUIREDNICK; break; case CLCC_GAMESPY_D2GCATALOGREGION: if ( g_pGameCVars ) { requestedParams[a].m_pData = ( void* )g_pGameCVars->g_gamespy_catalog_region; } else { requestedParams[a].m_pData = NULL; } break; case CLCC_GAMESPY_D2GCATALOGVERSION: if ( g_pGameCVars ) { requestedParams[a].m_32 = g_pGameCVars->g_gamespy_catalog_version->GetIVal(); } else { requestedParams[a].m_32 = 0; } break; case CLCC_GAMESPY_D2GCATALOGTOKEN: if ( g_pGameCVars ) { requestedParams[a].m_pData = ( void* )g_pGameCVars->g_gamespy_catalog_token; } else { requestedParams[a].m_pData = 0; } break; // CLCC_CRYLOBBY_LOGINGUISTATE is common to all online services for // which login is not handled by the OS. It will be requested if any // other requested data may require a login GUI to be displayed. case CLCC_CRYLOBBY_LOGINGUISTATE: //CRY_TODO( 30, 4, 2010, "Display a real GUI, don't use these hard coded values" ); if ( g_pGameCVars ) { ECryLobbyLoginGUIState requestedGUIState = eCLLGS_ExistingAccount;//eCLLGS_NotFinished; if(gEnv->IsDedicated() || g_pGameCVars->g_gamespy_loginUI==0) { requestedGUIState = eCLLGS_ExistingAccount; } else if(g_pGame->GetGameBrowser()) { // requestedGUIState = g_pGame->GetGameBrowser()->GetLoginGUIState(); } requestedParams[ a ].m_32 = requestedGUIState; } else { requestedParams[ a ].m_32 = eCLLGS_Cancelled; } break; case CLCC_CRYLOBBY_LOGINGUICOUNT: if ( g_pGameCVars ) { requestedParams[ a ].m_32 = 0;//g_pGameCVars->g_gamespy_loginCount; } else { requestedParams[ a ].m_32 = 0; } break; // The following GameSpy data may require a login GUI to be displayed. case CLCC_GAMESPY_EMAIL: if ( g_pGameCVars ) { string email = "crysis2."; email.append(g_pGameCVars->g_gamespy_accountnumber->GetString()); email.append("*****@*****.**"); requestedParams[a].m_pData = (void*)email.c_str();//(void*)g_pGameCVars->g_gamespy_email->GetString(); } else { requestedParams[a].m_pData = NULL; } break; case CLCC_GAMESPY_UNIQUENICK: if ( g_pGameCVars ) { string nick = "crysis2_"; nick.append(g_pGameCVars->g_gamespy_accountnumber->GetString()); nick.append("_paulm"); requestedParams[a].m_pData = (void*)nick.c_str();//(void*)g_pGameCVars->g_gamespy_unique_nick->GetString(); } else { requestedParams[a].m_pData = NULL; } break; case CLCC_GAMESPY_PASSWORD: if ( g_pGameCVars ) { requestedParams[a].m_pData = "upple?9!";//(void*)g_pGameCVars->g_gamespy_password->GetString(); } else { requestedParams[a].m_pData = NULL; } break; case CLCC_GAMESPY_CDKEY: if ( g_pGameCVars ) { requestedParams[a].m_pData = (void*)g_pGameCVars->g_gamespy_cdkey->GetString(); } else { requestedParams[a].m_pData = NULL; } break; case CLCC_GAMESPY_KEYNAME: // Session user data IDs map to GameSpy keys, which must be named. // CLCC_GAMESPY_KEYNAME will be requested for each session user data ID // greater than or equal to NUM_RESERVED_KEYS. // // IN: requestedParams[ a ].m_8 holds a session user data ID. // OUT: requestedParams[ a ].m_pData holds the GameSpy key name. // // NOTE: m_8 and m_pData are members of a union, so setting m_pData // will overwrite m_8. switch ( requestedParams[ a ].m_8 ) { case LID_MATCHDATA_GAMEMODE: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_GAMEMODE; break; case LID_MATCHDATA_MAP: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_MAP; break; case LID_MATCHDATA_ACTIVE: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_ACTIVE; break; case LID_MATCHDATA_VERSION: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_VERSION; break; case LID_MATCHDATA_REQUIRED_DLCS: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_REQUIRED_DLCS; break; case LID_MATCHDATA_PLAYLIST: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_PLAYLIST; break; case LID_MATCHDATA_LANGUAGE: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_LANGUAGE; break; case LID_MATCHDATA_OFFICIAL: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_OFFICIAL; break; case LID_MATCHDATA_FAVOURITE_ID: requestedParams[ a ].m_pData = GAMESPY_KEYNAME_MATCHDATA_FAVOURITE_ID; break; default: CRY_ASSERT_MESSAGE( 0, "Session user data ID has no GameSpy key name" ); requestedParams[ a ].m_pData = NULL; break; } break; case CLCC_GAMESPY_KEYSTRINGVALUE: { SCryLobbyUserDataStringParam* pParam = static_cast< SCryLobbyUserDataStringParam* >( requestedParams[ a ].m_pData ); switch ( pParam->id ) { case LID_MATCHDATA_MAP: requestedParams[ a ].m_pData = const_cast< void* >( static_cast< const void* >( GameLobbyData::GetMapFromHash( pParam->value ) ) ); break; case LID_MATCHDATA_GAMEMODE: requestedParams[ a ].m_pData = const_cast< void* >( static_cast< const void* >( GameLobbyData::GetGameRulesFromHash( pParam->value ) ) ); break; default: requestedParams[ a ].m_pData = NULL; break; } } break; case CLCC_GAMESPY_P2PLEADERBOARDFMT: requestedParams[a].m_pData = ( void* )GAMESPY_P2P_LEADERBOARD_FORMAT; break; case CLCC_GAMESPY_DEDICATEDLEADERBOARDFMT: requestedParams[a].m_pData = ( void* )GAMESPY_DEDICATED_LEADERBOARD_FORMAT; break; case CLCC_GAMESPY_P2PSTATSTABLE: requestedParams[a].m_pData = ( void* )GAMESPY_P2P_STATS_TABLE; break; case CLCC_GAMESPY_DEDICATEDSTATSTABLE: requestedParams[a].m_pData = ( void* )GAMESPY_DEDICATED_STATS_TABLE; break; case CLCC_GAMESPY_TITLECDKEYSERVER: requestedParams[a].m_32 = 1; break; #if defined( DEDICATED_SERVER ) case CLCC_GAMESPY_DEDIVERSION: requestedParams[a].m_32 = GAMESPY_DEDI_VERSION; break; #endif #if USE_CRYLOBBY_GAMESPY_VOIP case CLCC_GAMESPY_VOICE_CODEC: requestedParams[a].m_pData = (void*)CCryGameSpyVoiceCodec::Initialise(); break; #endif // USE_CRYLOBBY_GAMESPY_VOIP #endif // USE_CRYLOBBY_GAMESPY case CLCC_MATCHMAKING_SESSION_PASSWORD_MAX_LENGTH: requestedParams[a].m_8 = MATCHMAKING_SESSION_PASSWORD_MAX_LENGTH; break; default: CRY_ASSERT_MESSAGE(0,"Unknown Configuration Parameter Requested!"); break; } } }