public override float ProcessReward(SpinInfo spinInfo)
        {
            if (!needChangeReward)
            {
                return(spinInfo.finalRewardPercent);
            }

            if (isDecreaseBank)
            {
                if (spinInfo.finalStatus == SpinStatus.Lucky)
                {
                    return(Mathf.Max(1.0f, SlotsGame.Instance.SlotMachineConfig.rewardLimits.MinFalseReward / 100.0f));
                }
            }
            else
            {
                PeriodData periodData = DataManager.Instance.SlotsData.periodData;
                int        needBank   = (int)(periodData.playerBankOnStart * (periodData.curRTP / 100.0f));

                int   delta         = DataManager.Instance.Money - needBank;
                float rewardPercent = Mathf.Abs(delta) / (float)spinInfo.bet;
                return(rewardPercent);
            }
            return(spinInfo.finalRewardPercent);
        }
        public override SpinStatus ProcessSpinStatus(SpinInfo spinInfo)
        {
            PeriodData periodData = DataManager.Instance.SlotsData.periodData;
            int        needBank   = (int)(periodData.playerBankOnStart * (periodData.curRTP / 100.0f));

            int delta = DataManager.Instance.Money - needBank;

            isDecreaseBank   = false;
            needChangeReward = false;

            if (delta < 0)
            {
                needChangeReward = true;

                float rewardPercent = Mathf.Abs(delta) / (float)spinInfo.bet;
                if ((rewardPercent * 100) > SlotsGame.Instance.SlotMachineConfig.rewardLimits.MaxLuckyReward)
                {
                    return(SpinStatus.Big);
                }
                else
                {
                    return(SpinStatus.Lucky);
                }
            }
            else
            {
                int spinsLeft = spinInfo.id - DataManager.Instance.SlotsData.finishPeriodModData.startSpinIdByDescreaseBank;

                if (spinsLeft >= selfConfig.MaxSpinsToDecreaseBank)
                {
                    DataManager.Instance.FinishPeriod(true, false);
                    return(spinInfo.baseStatus);
                }

                isDecreaseBank = true;

                if (spinInfo.baseStatus != SpinStatus.Lose)
                {
                    float minFalseReward = SlotsGame.Instance.SlotMachineConfig.rewardLimits.MinFalseReward;
                    if (minFalseReward < 99.99f)
                    {
                        return(SpinStatus.False);
                    }
                    else
                    {
                        needChangeReward = true;
                        return(SpinStatus.Lucky);
                    }
                }
                else
                {
                    return(spinInfo.baseStatus);
                }
            }
        }
        public override bool NeedToDeactivate(SpinInfo spinInfo)
        {
            PeriodData periodData = DataManager.Instance.SlotsData.periodData;
            int        leftSpins  = DataManager.Instance.SlotsData.lastSpinId - periodData.startSpinId;

            if (leftSpins < SlotsGame.Instance.SlotsConfig.SpinsCountOnPeriod)
            {
                return(true);
            }
            return(false);
        }
Beispiel #4
0
        public void SetNewPeriod(PeriodData newData)
        {
            data.SlotsData.periodData = newData;

            SetDataDirty();
        }
        void CheckForNewPeriod()
        {
            bool createNewPeriod = false;

            PeriodData periodData = DataManager.Instance.SlotsData.periodData;
            int        leftSpins  = DataManager.Instance.SlotsData.lastSpinId - periodData.startSpinId;

            if (leftSpins > SlotsGame.Instance.SlotsConfig.SpinsCountOnPeriod)
            {
                int needBank = (int)(periodData.playerBankOnStart * (periodData.curRTP / 100.0f));

                int delta    = DataManager.Instance.Money - needBank;
                int maxDelta = SlotsGame.Instance.CurrentBet / 2;

                if (Mathf.Abs(delta) < maxDelta)
                {
                    createNewPeriod = true;
                }
                Debug.Log("Check for finish period. Current bank=" + DataManager.Instance.Money + "; Need bank=" + needBank + "; MaxDelta=" + maxDelta);
            }

            if (createNewPeriod || periodData.finished)
            {
                PeriodData newPeriodData = new PeriodData();
                newPeriodData.finished          = false;
                newPeriodData.isFirstPeriod     = false;
                newPeriodData.startSpinId       = currentSpin.id;
                newPeriodData.playerBankOnStart = DataManager.Instance.Money;

                float positiveTrendValue = SlotsGame.Instance.SlotsConfig.StartPositiveTrendPercent / 100.0f;
                if (!SlotsData.periodData.isFirstPeriod)
                {
                    float changeValue = SlotsGame.Instance.SlotsConfig.ChangeTrendPercent / 100.0f;
                    if (SlotsData.periodData.isPositiveTrend)
                    {
                        positiveTrendValue -= changeValue;
                    }
                    else
                    {
                        positiveTrendValue += changeValue;
                    }
                }

                bool currentPositiveTrend = UnityEngine.Random.value < positiveTrendValue;
                newPeriodData.isPositiveTrend = currentPositiveTrend;

                if (SlotsData.periodData.needOverrideNextTrend)
                {
                    newPeriodData.isPositiveTrend = SlotsData.periodData.nextPositiveTrend;
                }

                newPeriodData.needOverrideNextTrend = false;

                if (newPeriodData.isPositiveTrend)
                {
                    newPeriodData.curRTP = UnityEngine.Random.Range(100.0f, SlotsGame.Instance.SlotsConfig.RTPMaxPercent);
                }
                else
                {
                    newPeriodData.curRTP = UnityEngine.Random.Range(SlotsGame.Instance.SlotsConfig.RTPMinPercent, 100.0f);
                }

                string createReason = "default";
                if (periodData.finished)
                {
                    createReason = "forced";
                }

                Debug.Log("New period created " + createReason + "! Start spin= " + newPeriodData.startSpinId + "; New RTP: " + newPeriodData.curRTP + ". Player bank: " + newPeriodData.playerBankOnStart);

                DataManager.Instance.SetNewPeriod(newPeriodData);
            }
        }