Exemple #1
0
    //-----------------------------------------------------------------------------
    // 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);
            }
        }
    }
Exemple #2
0
    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;
        }
    }