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); }
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); } }