Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const WHEEL1RNG = [5, 2, 6, 5, 6, 30, 30, 10, 3, 3];
- const WHEEL2RNG = [8, 2, 0, 25, 10, 10, 7, 20, 12, 6];
- const WHEEL3RNG = [5, 2, 6, 30, 30, 5, 6, 5, 6, 5]; // Bonus (third in) should be 6, bumped up to 25 for testing. Applicable to wheels 1, 3 and 5.
- const WHEEL4RNG = [2, 2, 0, 11, 20, 25, 15, 15, 5, 5];
- const WHEEL5RNG = [1, 2, 6, 10, 25, 10, 11, 10, 15, 10];
- const FREESPINCHANCE = 0.5;
- const DEBUGMODE = false;
- const PAYOUTS = {
- 1: [0, 0, 0, 2000],
- 2: [4, 10, 20, 80],
- 3: [0, 0, 0, 0],
- 4: [1, 5, 10, 50],
- 5: [1, 7, 15, 75],
- 6: [2, 10, 30, 120],
- 7: [2, 10, 50, 150],
- 8: [3, 20, 75, 200],
- 9: [4, 35, 350, 1500],
- 10: [5, 50, 500, 2000]
- };
- const LINES = {
- 1: [1, 1, 1, 1, 1],
- 2: [2, 2, 2, 2, 2],
- 3: [0, 0, 0, 0, 0],
- 4: [2, 1, 0, 1, 2],
- 5: [0, 1, 2, 1, 0],
- 6: [1, 2, 2, 2, 1],
- 7: [1, 0, 0, 0, 1],
- 8: [2, 2, 1, 0, 0],
- 9: [0, 0, 1, 2, 2],
- 10: [1, 0, 1, 2, 1],
- 11: [1, 2, 1, 0, 1],
- 12: [2, 1, 1, 1, 2],
- 13: [0, 1, 1, 1, 0],
- 14: [2, 1, 2, 1, 2],
- 15: [0, 1, 0, 1, 0],
- 16: [1, 1, 2, 1, 1],
- 17: [1, 1, 0, 1, 1],
- 18: [2, 2, 0, 2, 2],
- 19: [0, 0, 2, 0, 0],
- 20: [2, 0, 0, 0, 2],
- 21: [0, 2, 2, 2, 0],
- 22: [1, 0, 2, 0, 1],
- 23: [1, 2, 0, 2, 1],
- 24: [2, 0, 2, 0, 2],
- 25: [0, 2, 0, 2, 0]
- };
- const FREESPINSQUANTITY = [5, 10, 25];
- const FREESPINSQUANTITYCHANCE = [60, 30, 10];
- const FREESPINSMULTIPLIER = [2, 3, 5];
- const FREESPINSMULTIPLIERCHANCE = [60, 30, 10];
- const BONUSGAMESETAMIN = 5;
- const BONUSGAMESETAMAX = 75;
- const BONUSGAMESETANUMBER = 6;
- const BONUSGAMESETBMIN = 75;
- const BONUSGAMESETBMAX = 200;
- const BONUSGAMESETBNUMBER = 8;
- const BONUSGAMESETCMIN = 200;
- const BONUSGAMESETCMAX = 500;
- const BONUSGAMESETCNUMBER = 11;
- const BONUSGAMEPICKS = [3, 4, 5];
- const BONUSGAMEPICKSCHANCE = [60, 30, 10];
- const POSSIBLEBETSPERLINE = [1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000, 100000, 250000, 500000, 1000000];
- const AUTOSPINSPERHOUR = 30;
- handlers.OnSpin = function(args)
- {
- var RetObj = {};
- var GetUserInventoryRequest =
- {
- "PlayFabId": currentPlayerId
- };
- var GetUserInventoryResult = server.GetUserInventory(GetUserInventoryRequest);
- if (GetUserInventoryResult.VirtualCurrency.hasOwnProperty("CO") && GetUserInventoryResult.VirtualCurrency.CO >= args.BetPerLine * 25)
- {
- RetObj["Wheel1"] = SetWheel(WHEEL1RNG, false);
- RetObj["Wheel2"] = SetWheel(WHEEL2RNG, false);
- RetObj["Wheel3"] = SetWheel(WHEEL3RNG, false);
- RetObj["Wheel4"] = SetWheel(WHEEL4RNG, false);
- RetObj["Wheel5"] = SetWheel(WHEEL5RNG, false);
- // Debug Bonus
- if (DEBUGMODE)
- {
- RetObj["Wheel1"][0] = 3;
- RetObj["Wheel3"][0] = 3;
- RetObj["Wheel5"][0] = 3;
- }
- RetObj = CalculateWins(RetObj, args.BetPerLine, false);
- var NetValue = RetObj["TotalWin"] - args.BetPerLine * 25;
- // Add / Subtract Currency
- if (DEBUGMODE)
- {
- RetObj["Coins"] = GetUserInventoryResult.VirtualCurrency.CO;
- }
- else
- {
- if (NetValue > 0) {
- var AddUserVirtualCurrencyRequest =
- {
- "PlayFabId": currentPlayerId,
- "VirtualCurrency": "CO",
- "Amount": NetValue
- };
- var AddUserVirtualCurrencyResult = server.AddUserVirtualCurrency(AddUserVirtualCurrencyRequest);
- RetObj["Coins"] = AddUserVirtualCurrencyResult.Balance;
- }
- else if (NetValue < 0) {
- var SubtractUserVirtualCurrencyRequest =
- {
- "PlayFabId": currentPlayerId,
- "VirtualCurrency": "CO",
- "Amount": -NetValue
- };
- var SubtractUserVirtualCurrencyResult = server.SubtractUserVirtualCurrency(SubtractUserVirtualCurrencyRequest);
- RetObj["Coins"] = SubtractUserVirtualCurrencyResult.Balance;
- }
- else {
- RetObj["Coins"] = GetUserInventoryResult.VirtualCurrency.CO;
- }
- }
- //SpinWonNothing
- var SWN = 0;
- if (RetObj["TotalWin"] == 0)
- {
- SWN = 1;
- }
- //SpinWonButLost
- var SWBL = 0;
- if (RetObj["TotalWin"] > 0 && RetObj["TotalWin"] < args.BetPerLine * 25)
- {
- SWBL = 1;
- }
- //SpinBreakEven
- var SBE = 0;
- if (RetObj["TotalWin"] == args.BetPerLine * 25) {
- SBE = 1;
- }
- //FreeSpins
- var FS = 0;
- if (RetObj["FreeSpinsEntered"] != null)
- {
- FS = 1;
- }
- //BonusGame
- var BG = 0;
- if (RetObj["BonusGameEntered"] != null)
- {
- BG = 1;
- }
- // Update Player Statistics
- if (!DEBUGMODE)
- {
- server.UpdatePlayerStatistics(
- {
- PlayFabId: currentPlayerId,
- Statistics:
- [{
- StatisticName: "Spins",
- Value: 1
- }, {
- StatisticName: "BiggestWin",
- Value: RetObj["TotalWin"] / args.BetPerLine
- }, {
- StatisticName: "SpinWonNothing",
- Value: SWN
- }, {
- StatisticName: "SpinWonButLost",
- Value: SWBL
- }, {
- StatisticName: "SpinBreakEven",
- Value: SBE
- }, {
- StatisticName: "MinCoins",
- Value: RetObj["Coins"]
- }, {
- StatisticName: "FreeSpinsPlayed",
- Value: FS
- }, {
- StatisticName: "BonusGamesPlayed",
- Value: BG
- }]
- });
- }
- RetObj["Success"] = true;
- }
- else
- {
- RetObj["Success"] = false;
- }
- return RetObj;
- }
- function SetWheel(RNG, Bonus)
- {
- var Icon1 = Math.round(Math.random() * 100);
- var Icon2 = Math.round(Math.random() * 100);
- var Icon3 = Math.round(Math.random() * 100);
- var Icon1Result = 0;
- var Icon2Result = 0;
- var Icon3Result = 0;
- var j = 0;
- for (var i = 0; i < 10; i++)
- {
- if(j <= Icon1)
- {
- Icon1Result++;
- }
- if(j <= Icon2)
- {
- Icon2Result++;
- }
- if(j <= Icon3)
- {
- Icon3Result++;
- }
- j += RNG[i];
- }
- if (Bonus)
- {
- if(Icon1Result == 3)
- {
- Icon1Result = 1;
- }
- if (Icon2Result == 3)
- {
- Icon2Result = 1;
- }
- if (Icon3Result == 3)
- {
- Icon3Result = 1;
- }
- }
- var Ret = [Icon1Result, Icon2Result, Icon3Result];
- if((Icon1Result == 2 && Icon2Result == 2) || (Icon1Result == 2 && Icon3Result == 2) || (Icon2Result == 2 && Icon3Result == 2) || (Icon1Result == 3 && Icon2Result == 3) || (Icon1Result == 3 && Icon3Result == 3) || (Icon2Result == 3 && Icon3Result == 3))
- {
- Ret = SetWheel(RNG);
- }
- return Ret;
- }
- function CalculateWins(RetObj, BetPerLine, Bonus, Auto)
- {
- var Lines = {};
- var TotalWin = 0;
- for (var i = 1; i < 26; i++)
- {
- var Sequence = [];
- Sequence.push(RetObj["Wheel1"][LINES[i][0]]);
- Sequence.push(RetObj["Wheel2"][LINES[i][1]]);
- Sequence.push(RetObj["Wheel3"][LINES[i][2]]);
- Sequence.push(RetObj["Wheel4"][LINES[i][3]]);
- Sequence.push(RetObj["Wheel5"][LINES[i][4]]);
- Lines["Line" + i] = Sequence;
- if(Sequence[0] == 1)
- {
- if(Sequence[1] == 1)
- {
- if(Sequence[2] == 1)
- {
- if(Sequence[3] == 1)
- {
- if(Sequence[4] == 1)
- {
- for (var j = 0; j < 5; j++)
- {
- if(Sequence[j] == 1)
- {
- Sequence[j] = 10;
- }
- }
- }
- else
- {
- for (var j = 0; j < 5; j++)
- {
- if (Sequence[j] == 1)
- {
- Sequence[j] = Sequence[4];
- }
- }
- }
- }
- else
- {
- for (var j = 0; j < 5; j++)
- {
- if (Sequence[j] == 1)
- {
- Sequence[j] = Sequence[3];
- }
- }
- }
- }
- else
- {
- for (var j = 0; j < 5; j++)
- {
- if (Sequence[j] == 1)
- {
- Sequence[j] = Sequence[2];
- }
- }
- }
- }
- else
- {
- for (var j = 0; j < 5; j++)
- {
- if(Sequence[j] == 1)
- {
- Sequence[j] = Sequence[1];
- }
- }
- }
- }
- else
- {
- for (var j = 0; j < 5; j++)
- {
- if(Sequence[j] == 1)
- {
- Sequence[j] = Sequence[0];
- }
- }
- }
- if(Sequence[0] > 3)
- {
- var RunningCount = 1;
- if(Sequence[0] == Sequence[1])
- {
- RunningCount++;
- if(Sequence[1] == Sequence[2])
- {
- RunningCount++;
- if(Sequence[2] == Sequence[3])
- {
- RunningCount++;
- if(Sequence[3] == Sequence[4])
- {
- RunningCount++;
- }
- }
- }
- }
- if(RunningCount == 1)
- {
- //if (!Bonus)
- {
- RetObj["Line" + i] = 0;
- }
- }
- else
- {
- //if (!Bonus)
- {
- RetObj["Line" + i] = PAYOUTS[Sequence[0]][RunningCount - 2] * BetPerLine;
- }
- TotalWin += PAYOUTS[Sequence[0]][RunningCount - 2] * BetPerLine;
- }
- }
- else
- {
- if (!Bonus)
- {
- RetObj["Line" + i] = 0;
- }
- }
- }
- var Scatters = 0;
- if (RetObj["Wheel1"].indexOf(2) > -1)
- {
- Scatters++;
- }
- if (RetObj["Wheel2"].indexOf(2) > -1)
- {
- Scatters++;
- }
- if (RetObj["Wheel3"].indexOf(2) > -1)
- {
- Scatters++;
- }
- if (RetObj["Wheel4"].indexOf(2) > -1)
- {
- Scatters++;
- }
- if (RetObj["Wheel5"].indexOf(2) > -1)
- {
- Scatters++;
- }
- if (Scatters >= 2)
- {
- if (!Bonus)
- {
- RetObj["ScatterPayout"] = PAYOUTS[2][Scatters - 2] * BetPerLine * 25;
- }
- TotalWin += PAYOUTS[2][Scatters - 2] * BetPerLine * 25;
- }
- else
- {
- if (!Bonus)
- {
- RetObj["ScatterPayout"] = 0;
- }
- }
- RetObj["TotalWin"] = TotalWin;
- if (RetObj["Wheel1"].indexOf(3) > -1 && RetObj["Wheel3"].indexOf(3) > -1 && RetObj["Wheel5"].indexOf(3) > -1 && !Bonus)
- {
- RetObj = EnterBonusGame(RetObj, BetPerLine, Auto);
- }
- return RetObj;
- }
- function EnterBonusGame(RetObj, BetPerLine, Auto)
- {
- if(Math.random() <= FREESPINCHANCE)
- {
- RetObj["FreeSpinsEntered"] = true;
- var QuantityIndex = 0;
- var QuantityRNG = Math.round(Math.random() * 100);
- var X = 0;
- for (var i = 0; i < FREESPINSQUANTITYCHANCE.length; i++)
- {
- X += FREESPINSQUANTITYCHANCE[i];
- if(QuantityRNG > X)
- {
- QuantityIndex++;
- }
- }
- var Quantity = FREESPINSQUANTITY[QuantityIndex];
- RetObj["FreeSpinsQuantity"] = Quantity;
- var MultiplierIndex = 0;
- var MultiplierRNG = Math.round(Math.random() * 100);
- X = 0;
- for (var i = 0; i < FREESPINSMULTIPLIERCHANCE.length; i++)
- {
- X += FREESPINSMULTIPLIERCHANCE[i];
- if (MultiplierRNG > X)
- {
- MultiplierIndex++;
- }
- }
- var Multiplier = FREESPINSMULTIPLIER[MultiplierIndex];
- RetObj["FreeSpinsMultiplier"] = Multiplier;
- RetObj["FreeSpinData"] = [];
- var RunningTotal = 0;
- for (var i = 0; i < Quantity; i++)
- {
- var Data = {};
- Data["Wheel1"] = SetWheel(WHEEL1RNG, true);
- Data["Wheel2"] = SetWheel(WHEEL2RNG, true);
- Data["Wheel3"] = SetWheel(WHEEL3RNG, true);
- Data["Wheel4"] = SetWheel(WHEEL4RNG, true);
- Data["Wheel5"] = SetWheel(WHEEL5RNG, true);
- Data = CalculateWins(Data, BetPerLine, true);
- Data["TotalWin"] = Data["TotalWin"] * Multiplier;
- RunningTotal += Data["TotalWin"];
- RetObj.FreeSpinData.push(Data);
- }
- // Add Currency
- if (!DEBUGMODE && Auto != true)
- {
- var AddUserVirtualCurrencyRequest =
- {
- "PlayFabId": currentPlayerId,
- "VirtualCurrency": "CO",
- "Amount": RunningTotal
- };
- var AddUserVirtualCurrencyResult = server.AddUserVirtualCurrency(AddUserVirtualCurrencyRequest);
- }
- RetObj["FreeSpinTotalWin"] = RunningTotal;
- }
- else
- {
- RetObj["BonusGameEntered"] = true;
- RetObj["BonusValues"] = [];
- // Set A
- for (var i = 0; i < BONUSGAMESETANUMBER; i++)
- {
- var X = Math.floor(Math.random() * (BONUSGAMESETAMAX - BONUSGAMESETAMIN) + BONUSGAMESETAMIN) * BetPerLine;
- RetObj.BonusValues.push(X);
- }
- // Set B
- for (var i = 0; i < BONUSGAMESETBNUMBER; i++)
- {
- var X = Math.floor(Math.random() * (BONUSGAMESETBMAX - BONUSGAMESETBMIN) + BONUSGAMESETBMIN) * BetPerLine;
- RetObj.BonusValues.push(X);
- }
- // Set C
- for (var i = 0; i < BONUSGAMESETCNUMBER; i++)
- {
- var X = Math.floor(Math.random() * (BONUSGAMESETCMAX - BONUSGAMESETCMIN) + BONUSGAMESETCMIN) * BetPerLine;
- RetObj.BonusValues.push(X);
- }
- var PicksIndex = 0;
- var PicksRNG = Math.round(Math.random() * 100);
- var X = 0;
- for (var i = 0; i < BONUSGAMEPICKSCHANCE.length; i++)
- {
- X += BONUSGAMEPICKSCHANCE[i];
- if (PicksRNG > X) {
- PicksIndex++;
- }
- }
- var Picks = BONUSGAMEPICKS[PicksIndex];
- RetObj["BonusPicks"] = Picks;
- var PickIndexes = [];
- var RunningTotal = 0;
- for (var i = 0; i < Picks; i++)
- {
- var Y = Math.floor(Math.random() * RetObj["BonusValues"].length);
- while(PickIndexes.indexOf(Y) != -1)
- {
- Y = Math.floor(Math.random() * RetObj["BonusValues"].length);
- }
- RunningTotal += RetObj.BonusValues[Y];
- PickIndexes.push(Y);
- }
- RetObj["BonusPickIndexes"] = PickIndexes;
- RetObj["BonusTotalWin"] = RunningTotal;
- // Add Currency
- if (!DEBUGMODE && Auto != true)
- {
- var AddUserVirtualCurrencyRequest =
- {
- "PlayFabId": currentPlayerId,
- "VirtualCurrency": "CO",
- "Amount": RunningTotal
- };
- var AddUserVirtualCurrencyResult = server.AddUserVirtualCurrency(AddUserVirtualCurrencyRequest);
- }
- }
- return RetObj;
- }
- handlers.OnGetPlayerStatus = function(args)
- {
- var RetObj = {};
- var PlayerStats = server.GetPlayerStatistics(
- {
- PlayFabId: currentPlayerId,
- StatisticNames: ["IdleCoins"]
- });
- var IC = 0;
- for (var i = 0; i < PlayerStats.Statistics.length; i++) {
- if (PlayerStats.Statistics[i].StatisticName == "IdleCoins") {
- IC = PlayerStats.Statistics[i].Value;
- }
- }
- RetObj["IdleCoins"] = IC;
- server.UpdatePlayerStatistics(
- {
- PlayFabId: currentPlayerId,
- Statistics:
- [{
- StatisticName: "IdleCoins",
- Value: 0
- }],
- ForceUpdate: true
- });
- if (IC > 0) {
- var AddUserVirtualCurrencyRequest =
- {
- "PlayFabId": currentPlayerId,
- "VirtualCurrency": "CO",
- "Amount": IC
- };
- var AddUserVirtualCurrencyResult = server.AddUserVirtualCurrency(AddUserVirtualCurrencyRequest);
- }
- else if (IC < 0) {
- var SubtractUserVirtualCurrencyRequest =
- {
- "PlayFabId": currentPlayerId,
- "VirtualCurrency": "CO",
- "Amount": -IC
- };
- var SubtractUserVirtualCurrencyResult = server.SubtractUserVirtualCurrency(SubtractUserVirtualCurrencyRequest);
- }
- var GetUserInventoryRequest =
- {
- "PlayFabId": currentPlayerId
- };
- var GetUserInventoryResult = server.GetUserInventory(GetUserInventoryRequest);
- if (GetUserInventoryResult.VirtualCurrency.hasOwnProperty("CO")) {
- RetObj["Coins"] = GetUserInventoryResult.VirtualCurrency.CO;
- RetObj["Success"] = true;
- }
- else {
- RetObj["Success"] = false;
- }
- return RetObj;
- }
- handlers.OnPlayerIdleRun = function(args)
- {
- var GetUserInventoryRequest =
- {
- "PlayFabId": currentPlayerId
- };
- var GetUserInventoryResult = server.GetUserInventory(GetUserInventoryRequest);
- if (GetUserInventoryResult.VirtualCurrency.hasOwnProperty("CO"))
- {
- var CoinsOwned = GetUserInventoryResult.VirtualCurrency.CO;
- var Bet = GetDefaultBet(CoinsOwned);
- var RunningTotal = 0;
- for (var i = 0; i < AUTOSPINSPERHOUR; i++)
- {
- var SpinObj = {};
- SpinObj["Wheel1"] = SetWheel(WHEEL1RNG, false);
- SpinObj["Wheel2"] = SetWheel(WHEEL2RNG, false);
- SpinObj["Wheel3"] = SetWheel(WHEEL3RNG, false);
- SpinObj["Wheel4"] = SetWheel(WHEEL4RNG, false);
- SpinObj["Wheel5"] = SetWheel(WHEEL5RNG, false);
- SpinObj = CalculateWins(SpinObj, Bet, false, true);
- var Total = SpinObj.TotalWin;
- if(SpinObj.hasOwnProperty("FreeSpinTotalWin"))
- {
- Total += SpinObj.FreeSpinTotalWin;
- }
- if (SpinObj.hasOwnProperty("BonusTotalWin"))
- {
- Total += SpinObj.BonusTotalWin;
- }
- RunningTotal += Total;
- }
- //if (RunningTotal > 0)
- //{
- // var AddUserVirtualCurrencyRequest =
- // {
- // "PlayFabId": currentPlayerId,
- // "VirtualCurrency": "CO",
- // "Amount": RunningTotal
- // };
- // var AddUserVirtualCurrencyResult = server.AddUserVirtualCurrency(AddUserVirtualCurrencyRequest);
- //}
- //else if (RunningTotal < 0)
- //{
- // var SubtractUserVirtualCurrencyRequest =
- // {
- // "PlayFabId": currentPlayerId,
- // "VirtualCurrency": "CO",
- // "Amount": -RunningTotal
- // };
- // var SubtractUserVirtualCurrencyResult = server.SubtractUserVirtualCurrency(SubtractUserVirtualCurrencyRequest);
- //}
- server.UpdatePlayerStatistics(
- {
- PlayFabId: currentPlayerId,
- Statistics:
- [{
- StatisticName: "IdleCoins",
- Value: RunningTotal
- }]
- });
- return RunningTotal;
- }
- }
- function GetDefaultBet(Coins)
- {
- var Distances = [];
- for (var i = 0; i < POSSIBLEBETSPERLINE.length; i++)
- {
- Distances.push(Math.abs(Coins - (POSSIBLEBETSPERLINE[i] * 25 * 40)));
- }
- return Distances.indexOf(Math.min.apply(null, Distances));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement