//----------------------------------------------------------------------------- // Purpose: We have stats data from Steam. It is authoritative, so update // our data with those results now. //----------------------------------------------------------------------------- /// <summary> /// 上传数据完成后,收到回调 UserStatsReceived_t /// </summary> /// <param name="pCallback"></param> private void OnUserStatsReceived(UserStatsReceived_t pCallback) { if (!SteamManager.Initialized) { return; } // we may get callbacks for other games' stats arriving, ignore them if ((ulong)m_GameID == pCallback.m_nGameID) { if (EResult.k_EResultOK == pCallback.m_eResult) { Debug.Log("Received stats and achievements from Steam\n"); m_bStatsValid = true; // load achievements for (int i = 0; i < m_Achievements.Length; i++) { bool ret = SteamUserStats.GetAchievement(m_Achievements[i].m_apiName, out m_Achievements[i].m_bAchieved); if (ret) { //m_Achievements[i].m_apiName = SteamUserStats.GetAchievementDisplayAttribute(m_Achievements[i].m_apiName, "name"); m_Achievements[i].m_strDescription = SteamUserStats.GetAchievementDisplayAttribute(m_Achievements[i].m_apiName, "desc"); Debug.Log(m_Achievements[i].m_eAchievementID.ToString() + " " + m_Achievements[i].m_bAchieved + " " + m_Achievements[i].m_apiName + " " + m_Achievements[i].m_strDescription); } else { Debug.Log("SteamUserStats.GetAchievement failed for Achievement " + m_Achievements[i].m_eAchievementID + "\nIs it registered in the Steam Partner site?"); } // load stats if (!string.IsNullOrEmpty(m_StatNames[(int)m_Achievements[i].m_eStatID])) { bool bget = StatsUserPrefs.GetIntValue(m_StatNames[(int)m_Achievements[i].m_eStatID], out m_Stats[(int)m_Achievements[i].m_eAchievementID].m_StatValue); if (!bget) { Debug.LogWarning("Do not has " + m_StatNames[(int)m_Achievements[i].m_eStatID]); } } } } else { Debug.Log("RequestStats - failed, " + pCallback.m_eResult); } } }
private void Update() { if (!SteamManager.Initialized) { return; } if (!m_bRequestedStats) { // Is Steam Loaded? if no, can't get stats, done if (!SteamManager.Initialized) { m_bRequestedStats = true; return; } // If yes, request our stats bool bSuccess = SteamUserStats.RequestCurrentStats(); // This function should only return false if we weren't logged in, and we already checked that. // But handle it being false again anyway, just ask again later. m_bRequestedStats = bSuccess; } if (!m_bStatsValid) { return; } #if UNITY_EDITOR if (ResetAchivements) { ResetAllAchievements(); ResetAllStats(); ResetAchivements = false; } if (Test) { OnGameStateChange(AchivementType); Test = false; } #endif //获取当前玩家entity if (Pathea.PeCreature.Instance != null && Pathea.PeCreature.Instance.mainPlayer != null) { if (!m_Maiplayer || !m_Maiplayer.Equals(Pathea.PeCreature.Instance.mainPlayer)) { m_Maiplayer = Pathea.PeCreature.Instance.mainPlayer; m_playerPkg = (m_Maiplayer.packageCmpt as Pathea.PlayerPackageCmpt); if (m_playerPkg != null) { m_playerPkg.package._playerPak.changeEventor.Subscribe(OnItemChange); } } } if (m_Maiplayer && Pathea.Money.Digital) { if (m_Maiplayer.packageCmpt != null && m_Maiplayer.packageCmpt.money != null && m_Maiplayer.packageCmpt.money.current >= 10000) { //完成成就:富可敌国 OnGameStateChange(Eachievement.Richer); } } // Get info from sources // Evaluate achievements int achedNum = 0; for (int i = 0; i < m_Achievements.Length; i++) { if (m_Achievements[i].m_bAchieved) { achedNum++; continue; } if (m_Stats[(int)m_Achievements[i].m_eAchievementID].IsAccomplish()) { UnlockAchievement(m_Achievements[i]); } } //全部成就完成 if (achedNum == ((int)Eachievement.Max - 2)) { if (!m_Achievements[(int)Eachievement.ALL].m_bAchieved) { UnlockAchievement(m_Achievements[(int)Eachievement.ALL]); } } //Store stats by self if (m_bStoreStats) { //保存更改 bool bSuccess = false;//SteamUserStats.StoreStats(); for (int i = 0; i < m_Achievements.Length; i++) { if (string.IsNullOrEmpty(m_StatNames[(int)m_Achievements[i].m_eStatID])) { continue; } bSuccess = StatsUserPrefs.SaveIntValue(m_StatNames[(int)m_Achievements[i].m_eStatID], m_Stats[(int)m_Achievements[i].m_eAchievementID].m_StatValue); } SteamUserStats.StoreStats(); // If this failed, we never sent anything to the server, try // again later. m_bStoreStats = !bSuccess; } }