public void FireSpinResultEvent()
        {
            if (spinResults == null)
            {
                return;
            }

            Dictionary <string, object> data = new Dictionary <string, object>();
            string eventName = spinResults.CompetitiveGameId.HasValue() ? WynnAnalyticsDataConstants.AE_RECORD_BATTLE_SPIN_RESULT : WynnAnalyticsDataConstants.AE_SPIN_RESULT;

            data[WynnAnalyticsDataConstants.AT_GAME_ID]               = spinResults.GameId;
            data[WynnAnalyticsDataConstants.ME_BET_MULTIPLIER]        = spinResults.BetMultiplier;
            data[WynnAnalyticsDataConstants.ME_BET]                   = spinResults.Bet;
            data[WynnAnalyticsDataConstants.ME_WIN]                   = spinResults.Win;
            data[WynnAnalyticsDataConstants.ME_NO_OF_SPIN]            = spinResults.NoOfSpin;
            data[WynnAnalyticsDataConstants.ME_WIN_JACKPOT_AMOUNT]    = spinResults.JackpotAmount;
            data[WynnAnalyticsDataConstants.AT_WIN_JACKPOT_TYPE]      = spinResults.JackpotType;
            data[WynnAnalyticsDataConstants.AT_IS_F]                  = spinResults.IsF;
            data[WynnAnalyticsDataConstants.AT_IS_TURBO]              = spinResults.IsTurboMode;
            data[WynnAnalyticsDataConstants.AT_BATTLE_ID]             = spinResults.CompetitiveGameId;
            data[WynnAnalyticsDataConstants.AT_IS_AUTO_SPIN]          = spinResults.IsAutoSpin;
            data[WynnAnalyticsDataConstants.AT_TOURNAMENT_ID]         = spinResults.TournamentId;
            data[WynnAnalyticsDataConstants.AT_IS_HIGH_ROLLER]        = spinResults.IsHighRoller;
            data[WynnAnalyticsDataConstants.AT_FEATURE_GAME_TYPE]     = spinResults.FeatureGameType;
            data[WynnAnalyticsDataConstants.ME_BET_LEVEL]             = spinResults.BetLevel;
            data[WynnAnalyticsDataConstants.ME_ADDITIONAL_BET_INDEX]  = spinResults.AdditionalBetIndex;
            data[WynnAnalyticsDataConstants.AT_BINGO_DROPPED_NUMBERS] = spinResults.BingoDroppedNumbers;
            data[WynnAnalyticsDataConstants.AT_EXTRA_PARAM]           = spinResults.EParam;
            data[WynnAnalyticsDataConstants.ME_DAYS_IN_GAME]          = WynnEngine.GetStateController <PlayerStatsStateController>().AgeInDays;

            RecordCustomEvent(eventName, data);

            spinResults = null;
        }
        private string GetABTestTags()
        {
            try
            {
                PlayerStatsStateController statsController = WynnEngine.GetStateController <PlayerStatsStateController>();

                if (statsController.ABTests != null)
                {
                    List <string> testTags = new List <string>();
                    foreach (ABTestTO to in statsController.ABTests)
                    {
                        testTags.Push(to.TestTag);
                    }

                    return(String.Join(",", testTags.ToArray()));
                }

                return("N/A");
            }
            catch (Exception e)
            {
                GameEngine.LogError(e);
                return("N/A");
            }
        }
        public Dictionary <string, object> EventsCommonData()
        {
            Dictionary <string, object> parameters = new Dictionary <string, object>();

            try
            {
                if (WynnEngine.PlayerId.HasValue())
                {
                    PlayerStatsStateController statsController = WynnEngine.GetStateController <PlayerStatsStateController>();
                    parameters[WynnAnalyticsDataConstants.AT_USER_ID]              = WynnEngine.PlayerId;
                    parameters[WynnAnalyticsDataConstants.ME_USER_LEVEL]           = statsController.PlayerLevel;
                    parameters[WynnAnalyticsDataConstants.ME_COIN_BALANCE]         = statsController.RegularCurrency;
                    parameters[WynnAnalyticsDataConstants.ME_GEM_BALANCE]          = statsController.PremiumCurrency;
                    parameters[WynnAnalyticsDataConstants.ME_LIFETIME_GEM_BALANCE] = statsController.LifeTimePremiumCurrency > 0 ? statsController.LifeTimePremiumCurrency : statsController.PremiumCurrency;
                    parameters[WynnAnalyticsDataConstants.ME_TOTAL_PAYMENTS]       = statsController.TotalPayments;
                    parameters[WynnAnalyticsDataConstants.ME_PLAYER_TOTAL_BATTLES] = statsController.PlayerStatsTO.BattlesPlayed;
                    parameters[WynnAnalyticsDataConstants.ME_PLAYER_TOTAL_SHIELDS] = statsController.PlayerStatsTO.Shields;
                    parameters[WynnAnalyticsDataConstants.AT_ABTEST_TAGS]          = GetABTestTags();
                    parameters[WynnAnalyticsDataConstants.AT_ABTEST_VARIANT]       = GetABTestVariants();
                    parameters[WynnAnalyticsDataConstants.AT_START_DATE]           = statsController.CreateDate;
                    parameters[WynnAnalyticsDataConstants.AT_FB_PROFILE]           = statsController.PlayerStatsTO.FacebookId > 0 ? "1" : "0";
                }
                else
                {
                    parameters[WynnAnalyticsDataConstants.AT_USER_ID]              = "N/A";
                    parameters[WynnAnalyticsDataConstants.ME_USER_LEVEL]           = -1;
                    parameters[WynnAnalyticsDataConstants.ME_COIN_BALANCE]         = -1;
                    parameters[WynnAnalyticsDataConstants.ME_GEM_BALANCE]          = -1;
                    parameters[WynnAnalyticsDataConstants.ME_TOTAL_PAYMENTS]       = -1;
                    parameters[WynnAnalyticsDataConstants.ME_PLAYER_TOTAL_SHIELDS] = -1;
                    parameters[WynnAnalyticsDataConstants.AT_ABTEST_TAGS]          = "N/A";
                    parameters[WynnAnalyticsDataConstants.AT_ABTEST_VARIANT]       = "N/A";
                }

                if (GameEngine.HasService <WynnGameModulesManger>())
                {
                    WynnGameModulesManger modulesManger = GameEngine.GetService <WynnGameModulesManger>();
                    parameters[WynnAnalyticsDataConstants.AT_CURRENT_MODULE_NAME] = modulesManger.CurrentModuleName;
                    parameters[WynnAnalyticsDataConstants.AT_GAME_NAME]           = modulesManger.CurrentCasinoGameEnum.ToString();
                }
                else
                {
                    parameters[WynnAnalyticsDataConstants.AT_CURRENT_MODULE_NAME] = "N/A";
                    parameters[WynnAnalyticsDataConstants.AT_GAME_NAME]           = "N/A";
                }

                if (GameEngine.LocalPlayerDataManager != null)
                {
                    parameters[WynnAnalyticsDataConstants.ME_VERSION_SESSION_COUNT] = GameEngine.LocalPlayerDataManager.GetVersionNumberOfSessions();
                }
                else
                {
                    parameters[WynnAnalyticsDataConstants.ME_VERSION_SESSION_COUNT] = -1;
                }

                parameters[WynnAnalyticsDataConstants.AT_INTERNET_REACHABILITY] = GameEngine.InternetReachability.ToString();
                parameters[WynnAnalyticsDataConstants.AT_IDFA]              = advertisingId;
                parameters[WynnAnalyticsDataConstants.ME_FPS]               = Convert.ToInt64(GameEngine.CurrentFPS);
                parameters[WynnAnalyticsDataConstants.AT_GRAPHICS_QUALITY]  = GameEngine.IsSdPerformance ? "SD" : "HD";
                parameters[WynnAnalyticsDataConstants.AT_IS_LOW_END_DEVICE] = GameEngine.IsPossiblyLowEndDevice;

                return(parameters);
            }
            catch (Exception e)
            {
                GameEngine.LogError(e);
                return(parameters);
            }
        }