View difference between Paste ID: Sa5wAm0w and 1EWLJdmR
SHOW: | | - or go back to the newest paste.
1
 var config = {
2
    wager: {
3
      value: 100,
4
      type: 'balance',
5
      label: 'Base bet'
6
    },
7
    payout: {
8
      value: 2,
9
      type: 'multiplier',
10
      label: 'Coeff to wait for'
11
    },
12
    // limit_script_balance: {
13
    //   value: 100000,
14
    //   type: 'balance',
15
    //   label: 'Maximum lose'
16
    // }
17
  };
18
  // https://mtihc.github.io/bustabit-script-simulator/
19
  let wantedProfitInBits = config.wager.value / 100;
20
  let netProfit = 0;
21
  let baseList = [];
22
  let currentGamesPlayed = 0;
23
  let maxBet = 0;
24
  let balanceNeeded = 0;
25
  let wins = 0;
26
  let loses = 0;
27
  let currentlyPlaying = true;
28
  let SPLIT_INTO = 3;
29
  var MAX_LOSE = 0;
30
  var SESSION_NET_PROFIT = 0;
31
  var SESSION_MAX_BALANCE_NEEDED = 0;
32
  var ALL_GAMES = [];
33
  var SESSION_TIMES_ENTERED = 0;
34
  addLast50();
35
  var SMALL_SESSION_NET_PROFIT = 0;
36
  // generateLastNGames(engine.history.first().hash, 100);
37
38
  function addLast50() {
39
    var LATEST_50_GAMES = engine.history.toArray();
40
    // logTime(`LATEST_50 length ${LATEST_50_GAMES.length}`)
41
    for (let i = 0; i <= LATEST_50_GAMES.length - 1; i++) {
42
      ALL_GAMES.unshift(LATEST_50_GAMES[i].bust);
43
    }
44
    ALL_GAMES.push(engine.history.first().bust)
45
    for (var i = 0; i < ALL_GAMES.length - 1; i++) {
46
      // logTime(`id ${i} ${ALL_GAMES[i]}`);
47
    }
48
  }
49
50
  function getLastNWinPercentage(n, targetPayout) {
51
    let wins = 0;
52
    let loses = 0;
53
    let elements_used = 0
54
    for (let i = ALL_GAMES.length - 1; i > -1 && i > ALL_GAMES.length - 1 - n; i--) {
55
      elements_used++;
56
      if (ALL_GAMES[i] < targetPayout) {
57
        loses++;
58
      } else {
59
        wins++;
60
      }
61
    }
62
    let percentage = (wins / elements_used) * 100
63
    logTime(`L${elements_used} wins: ${percentage} %`);
64
    return percentage;
65
  }
66
67
68
  initScript();
69
70
71
  function getCurrentBetLightGuide() {
72
    let currentMultiplier = 0;
73
    let currentBet = null;
74
    if (netProfit >= 0 && currentGamesPlayed > 0) {
75
      return currentBet;
76
    }
77
    if (baseList.length >= 2) {
78
      currentMultiplier = baseList[0] + baseList[baseList.length - 1];
79
      currentBet = (currentMultiplier * config.wager.value);
80
    } else if (baseList.length === 1) {
81
      currentMultiplier = baseList[0];
82
      currentBet = (currentMultiplier * config.wager.value) * 2;
83
    } else {
84
      currentMultiplier = null;
85
    }
86
    return currentBet;
87
  }
88
89
  function initScript() {
90
91
    logTime(`Starting in game ${engine.history.first().id}`);
92
    // Want to earn: ` + wantedProfitInBits + ' bits. Splliting into: ' + SPLIT_INTO);
93
    SESSION_TIMES_ENTERED += 1;
94
    // let wanted_statistics = [800, 700, 600, 500, 400, 300, 200, 150, 100, 50, 40, 30, 20, 10];
95
    // wanted_statistics.forEach(function (element) {
96
    //   getLastNWinPercentage(element, 2);
97
    // })
98
    logTime('------------------------------------------------')
99
    // TO DO: Uncomment
100
    // for (let i = 1; i <= SPLIT_INTO; i++) {
101
    //   baseList.push(Math.round(wantedProfitInBits / SPLIT_INTO) * 100)
102
    // }
103
    baseList = [1, 2, 3];
104
    netProfit = 0;
105
    currentGamesPlayed = 0;
106
    maxBet = 0;
107
    balanceNeeded = 0;
108
    wins = 0;
109
    loses = 0;
110
    currentlyPlaying = true;
111
    SMALL_SESSION_NET_PROFIT = 0;
112
  }
113
114
  // Try to bet immediately when script starts
115
  if (engine.gameState === "GAME_STARTING") {
116
    makeBet();
117
  }
118
119
  engine.on('GAME_STARTING', onGameStarted);
120
  engine.on('GAME_ENDED', onGameEnded);
121
122
  function onGameStarted() {
123
    if (!currentlyPlaying) {
124
      initScript();
125
    }
126
    let currentBet = getCurrentBetLightGuide();
127
128
    if (!currentBet) {
129
      currentlyPlaying = false;
130
      printEndStatus();
131
      // engine.on('GAME_STARTING', function(){});
132
      initScript();
133
    }
134
    makeBet();
135
  }
136
137
  function onGameEnded() {
138
    ALL_GAMES.push(engine.history.first().bust);
139
    let lastGame = engine.history.first();
140
    // If we wagered, it means we played
141
    if (!lastGame.wager) {
142
      return;
143
    }
144
    let lastBet = getCurrentBetLightGuide();
145
146
    if (lastGame.cashedAt) {
147
      let profit = Math.round(((lastBet * config.payout.value) - lastBet) / 100);
148
      netProfit += profit;
149
      SESSION_NET_PROFIT += profit;
150
      SMALL_SESSION_NET_PROFIT += profit
151
      logTime(`Won ${profit} bits`);
152
      if (baseList.length > 1) {
153
        baseList.splice(baseList.length - 1, 1);
154
      }
155
      baseList.splice(0, 1);
156
      wins += 1;
157
    } else {
158
      var lost = lastBet / 100;
159
      logTime(`Lost ${lost} bits`);
160
      netProfit -= lost;
161
      SESSION_NET_PROFIT -= lost;
162
      baseList.push(lastBet / config.wager.value);
163
      loses += 1;
164
    }
165
    currentGamesPlayed += 1;
166
    // logTime(`Net profit: ${netProfit} Current bet: ${getCurrentBetLightGuide() / 100}`);
167
    let currentBalanceNeeded = netProfit + ((getCurrentBetLightGuide() / 100) * -1);
168
    if (currentBalanceNeeded < balanceNeeded) {
169
      balanceNeeded = currentBalanceNeeded;
170
    }
171
172
    if (currentBalanceNeeded < SESSION_MAX_BALANCE_NEEDED) {
173
      SESSION_MAX_BALANCE_NEEDED = currentBalanceNeeded;
174
    }
175
176
    logTime('Net profit: ' + netProfit + ' bits. Left to play: ' + baseList.length);
177
  }
178
179
  function printEndStatus() {
180
    logTime(`Game ended id: ${engine.history.first().id}. Played: ` + currentGamesPlayed + ' Net profit: ' + netProfit + ' bits. Balance needed: ' + balanceNeeded * -1 + ' bits Max bet: ' + maxBet / 100 + ' bits. Wins: ' + (wins / (wins + loses) * 100) + ' % Loses: ' + (loses / (wins + loses) * 100) + ' %');
181
    logTime(`SESSION NET PROFIT ${SESSION_NET_PROFIT} bits, SESSION MAX BALANCE NEEDED ${SESSION_MAX_BALANCE_NEEDED} bits, SESSION TIMES ENTERED ${SESSION_TIMES_ENTERED}`)
182
  }
183
184
  function makeBet() {
185
    let currentBet = getCurrentBetLightGuide();
186
    if (!currentBet) {
187
      printEndStatus();
188
      return;
189
    }
190
    engine.bet(currentBet, config.payout.value);
191
    if (currentBet > maxBet) {
192
      maxBet = currentBet;
193
    }
194
    logTime('betting ' + Math.round(currentBet / 100) + ' on ' + config.payout.value + ' x');
195
  }
196
197
  function logTime(msg) {
198
    let today = new Date();
199
    let calendarDate = `${today.getDate()}-${today.getMonth() + 1}-${today.getFullYear()}`;
200
    let now = `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`;
201
    log(`${now} ${msg}`);
202
  }