View difference between Paste ID: fhJsFsck and BdybpXcY
SHOW: | | - or go back to the newest paste.
1
// ================================================================
2
var enableBetting = true;               // Режим ставок вкл/выкл
3
var baseBet = getBaseBet();             // Базовая ставка в битсах
4
var GI_bet = baseBet;                   // Базовая ставка GI в битсах
5
var PI_bet = baseBet;                   // Базовая ставка PI в битсах
6
var FLY_bet = baseBet;                  // Базовая ставка FLY в битсах
7
var FLY_crash = 10;                  // Базовая ставка FLY в битсах
8
var baseStop = 10;                      // Базовый % выигрыша для остановки
9
// ================================================================
10
var round = 0;                          // Раунд игры
11
var last;                               // Сыгравший коэфициент в предыдущей игре
12
// ================================================================
13
var cashedOut = true;                   // Коэфициент
14
// ================================================================
15
var lastGamePlay;                       // Результат предыдущей игры
16
var startBR = engine.getBalance();      // Изначальный банкролл
17
var maxBR = startBR;                    // Максимальный банкролл за игру
18
var minBR = startBR;                    // Минимальный банкролл за игру
19
var curBR = startBR;                    // Текущий банкролл
20
var userName = engine.getUsername();    // Имена текущих игроков
21
var gamesWon = 0;                       // Количество выиграных ставок
22
var gamesLost = 0;                      // Количество проигранных ставок
23
var unplayed = 0;                       // Количество пропущеных игр
24
var net = 0;                            // Профит
25
var loseGames = 0;                      // Череда проигрышей
26
var winGames = 0;                       // Череда выигрышей
27
var maxBet = 0;                         // Максимальная ставка за игру
28
var winProc = 0;                        // Выигрыш в процентах
29
var timeStart = Date.now();             // Время начала работы бота
30
var timeToMaxBet = 0;                   // Время максимальной ставки
31
var timeToloseGames = 0;                // Время максимальной череды неудач
32
var timeTowinGames = 0;                 // Время максимальной череды удач
33
// ================================================================
34
var busts = new Array();                // Массив сыгравших ставок
35
var losePeriods = new Array();          // Массив времен для проигрышей
36
var winsPeriods = new Array();          // Массив времен для выигрышей
37
// ================================================================
38
var dataCollection = false;             // Флаг сбора данных
39
var Strategy = false;                   // Стратегия
40
// ================================================================
41
var falseGames = 0;                     // Счетчик пропуска раундов
42
var wins = 0;                           // Счетчик выигрышей
43
var loses = 0;                          // Счетчик проигрышей
44
var procStop = baseStop;                // Счетчик % выигрыша для остановки
45
// ================================================================
46
var h = 0;                              // часы
47
var m = 0;                              // минуты
48
var s = 0;                              // секунды
49
var stopped = 0;                        // время остновки
50
// ================================================================
51
engine.on('game_starting', function (data) {
52
    StartGame();
53
});
54
// ================================================================
55
engine.on('game_started', function (data) {
56
57
});
58
// ================================================================
59
engine.on('game_crash', function (data) {
60
    console.clear();
61
    lastGamePlay = engine.lastGamePlay();
62
    round += 1;
63
    last = data.game_crash / 100;
64
    busts.unshift(last);
65
    curBR = engine.getBalance();
66
    if (curBR < minBR) {
67
        minBR = curBR;
68
    } else if (curBR > maxBR) {
69
        maxBR = curBR;
70
    }
71
    net = curBR - startBR;
72
    if (lastGamePlay == "WON") {
73
        gamesWon += 1;
74
    } else if (lastGamePlay == "LOST") {
75
        gamesLost += 1;
76
    } else {
77
        unplayed += 1;
78
    }
79
    logRound();
80
});
81
// ================================================================
82
engine.on('cashed_out', function (data) {
83
    if (data.username == userName) {
84
        cashedOut = true;
85
    } else {
86
        // Здесь будем собирать коэфициенты других игроков
87
    }
88
});
89
// ================================================================
90
engine.on('player_bet', function (data) {
91
    if (data.username == userName) {
92
        cashedOut = false;
93
    } else {
94
        // Здесь будем собирать ставки других игроков
95
    }
96
});
97
// ================================================================
98
engine.on('msg', function (data) {
99
100
});
101
// ================================================================
102
engine.on('connect', function (data) {
103
104
});
105
// ================================================================
106
engine.on('disconnect', function (data) {
107
108
});
109
// ================================================================
110
function getTime(timeStop) {
111
    if (!timeStop) {
112
        var timeStop = Date.now();
113
    }
114
    var timer = new Date(timeStop - timeStart);
115
    h = (timer.getHours() - 3);
116
    m = (timer.getMinutes());
117
    s = (timer.getSeconds());
118
    return  h + ":" + m + ":" + s;
119
}
120
// ================================================================
121
function getBaseBet(proc) {
122
    if (!proc) {
123
        return 1;
124
    } else {
125
        return (Math.floor(engine.getBalance() / 100 / proc));
126
    }
127
}
128
// ================================================================
129
function cashOut() {
130
    if (!cashedOut) {
131
        engine.cashOut();
132
        cashedOut = true;
133
    }
134
}
135
// ================================================================
136
function placeBet(bet, cash, autoCash) {
137
    if (bet) {
138
        if (bet > 0) {
139
            if (cash) {
140
                if (cash >= 1) {
141
                    if (enableBetting) {
142
                        cashedOut = false;
143
                        cash = parseInt(cash * 100);
144
                        engine.placeBet(bet * 100, cash, autoCash);
145
                    }
146
                }
147
            }
148
        }
149
    }
150
}
151
// ================================================================
152
function getProc() {
153
    return ((net / (startBR / 100)).toFixed(2));
154
}
155
// ================================================================
156
function getWinsPeriod() {
157
    if (winsPeriods.length > 0) {
158
        return "\nСредний период стека выигрыша: " + getTime(median(winsPeriods));
159
    } else {
160
        return "";
161
    }
162
}
163
function getLosePeriod() {
164
    if (losePeriods.length > 0) {
165
        return "\nСредний период стека проигрыша: " + getTime(median(losePeriods));
166
    } else {
167
        return "";
168
    }
169
}
170
// ================================================================
171
function logRound() {
172
    var timer = getTime();
173
    var m1Busts = busts.slice();
174
    var m2Busts = busts.slice();
175
    var m3Busts = busts.slice();
176
    var botTitleStr = "Afodar's BustaBitBot\n";
177
    var timeStr = "\nВремя работы: " + getTime(false);
178
    var enableBettingStr = "\nСтавки включены: " + enableBetting;
179
    var baseBetStr = "\nБазовая ставка: " + baseBet;
180
    var roundStr = "\nРаунд: " + round;
181
    var lastStr = "\nСыграло в предыдущей игре: " + last;
182
    // ================================================================
183
    var lastGamePlayStr = "\nПредыдущая игра: " + lastGamePlay;
184
    var startBRStr = "\nСтартовый банкролл: " + startBR;
185
    var maxBRStr = "\nМаксимальный банкролл: " + maxBR;
186
    var minBRStr = "\nМинимальный банкролл: " + minBR;
187
    var curBRStr = "\nТекущий банкролл: " + curBR;
188
    var balanceProcStr = "\nВыиграно % от банкролла: " + getProc();
189
    var userNameStr = "\nАккаунт: " + userName;
190
    var gamesWonStr = "\nВыигано раудов: " + gamesWon;
191
    var gamesLostStr = "\nПроиграно раундов: " + gamesLost;
192
    var unplayedStr = "\nНе сыграно раундов: " + unplayed;
193
    var wonsStr = "\nЧереда выигрышей макс.: " + winGames + " [" + getTime(timeTowinGames) + "] назад";
194
    var lostsStr = "\nЧереда проигрышей макс.: " + loseGames + " [" + getTime(timeToloseGames) + "] назад";
195
    var maxBetStr = "\nМаксимальная ставка: " + maxBet + " [" + getTime(timeToMaxBet) + "] назад";
196
    var meanStr = "\nСредняя по коэфициентам: " + mean(m1Busts).toFixed(2);
197
    var medianStr = "\nЭкспоненциональная по коэфициентам: " + median(m2Busts).toFixed(2);
198
    var modeStr = "\nНаиболее часто играющий коэфициент: " + mode(m3Busts).toFixed(2);
199
    var netStr = "\nПрофит: " + net;
200
    console.log("\n" +
201
            botTitleStr +
202
            timeStr +
203
            enableBettingStr +
204
            baseBetStr +
205
            roundStr +
206
            lastStr +
207
            lastGamePlayStr +
208
            startBRStr +
209
            maxBRStr +
210
            minBRStr +
211
            curBRStr +
212
            balanceProcStr +
213
            userNameStr +
214
            gamesWonStr +
215
            gamesLostStr +
216
            unplayedStr +
217
            wonsStr +
218
            getWinsPeriod() +
219
            lostsStr +
220
            getLosePeriod() +
221
            maxBetStr +
222
            meanStr +
223
            medianStr +
224
            modeStr +
225
            netStr +
226
            "\n"
227
//            busts
228
            );
229
}
230
// Для сортировки массива
231
// ================================================================
232
numberSort = function (a, b) {
233
    return a - b;
234
};
235
236
// Средняя из массива
237
// ================================================================
238
function mean(arr) {
239
    if (arr) {
240
        if (arr.constructor === Array) {
241
            if (arr.length >= 1) {
242
                var sum = 0;
243
                for (var i = 0; i < arr.length; i++) {
244
                    sum += arr[i];
245
                }
246
                return (sum / arr.length);
247
            }
248
        }
249
    }
250
    return -1;
251
}
252
253
// Экспоненциональная средняя из массива
254
// =======================================================
255
function median(arr) {
256
    if (arr) {
257
        if (arr.constructor === Array) {
258
            if (arr.length >= 1) {
259
                arr = arr.sort(numberSort);
260
                if ((arr.length % 2) == 0) {
261
                    // Even
262
                    return (((arr[arr.length / 2] + arr[(arr.length / 2) - 1])) / 2);
263
                } else {
264
                    // Odd
265
                    return (arr[Math.floor(arr.length / 2)])
266
                }
267
            }
268
        }
269
    }
270
    return -1;
271
}
272
273
// Подсчет экспоненциональная средней разрыва между коэфициентами
274
// =======================================================
275
function stepMA(arr, cr) {
276
    if (arr) {
277
        if (arr.constructor === Array) {
278
            if (arr.length >= 1) {
279
                var stepsMA = [];
280
                var stepInc = 0;
281
                for (var i = 0; i < arr.length; i++) {
282
                    stepInc++;
283
                    if (((arr[i] >= cr) && (arr[i] < (cr + 1))) || ((arr[i] >= cr) && (cr == 5))) {
284
                        stepsMA.push(stepInc);
285
                        stepInc = 0;
286
                    }
287
                }
288
                var sArr = stepsMA.sort();
289
                return mean(sArr);
290
            }
291
        }
292
    }
293
    return -1;
294
}
295
296
// Подсчет количества коэфициентов с начала массива до запрашиваемого коэфицента
297
// =======================================================
298
function stepCR(arr, cr) {
299
    if (arr) {
300
        if (arr.constructor === Array) {
301
            if (arr.length >= 1) {
302
                for (var i = 0; i < arr.length; i++) {
303
                    if (((arr[i] >= cr) && (arr[i] < (cr + 1))) || ((arr[i] >= cr) && (cr == 5))) {
304
                        return (i + 1);
305
                    }
306
                }
307
            }
308
        }
309
    }
310
    return -1;
311
}
312
313
// Поиск наиболее встречающегося элемента в массиве
314
// =======================================================
315
function mode(arr) {
316
    if (arr) {
317
        if (arr.constructor === Array) {
318
            if (arr.length < 1) {
319
                return -2;
320
            } else {
321
                var modeMap = {};
322
                var maxEl = arr[0], maxCount = 1;
323
                for (var i = 0; i < arr.length; i++) {
324
                    var el = arr[i];
325
                    if (modeMap[el] == null) {
326
                        modeMap[el] = 1;
327
                    } else {
328
                        modeMap[el]++;
329
                    }
330
                    if (modeMap[el] > maxCount) {
331
                        maxEl = el;
332
                        maxCount = modeMap[el];
333
                    }
334
                }
335
                if (maxCount == 1) {
336
                    return -3;
337
                }
338
                return maxEl;
339
            }
340
        }
341
    }
342
    return -1;
343
}
344
function StartGame() {
345
// Сбор данных до начала игры
346
// =======================================================
347
    function DataCollection(sample) {
348
        if (round < sample) {
349
            console.log("======Сбор данных======");
350
            console.log("Осталось сборать " + (sample - round));
351
            console.log(" ");
352
        } else {
353
            console.log("======Данные собраны включаем тактику PI======");
354
            console.log(" ");
355
            dataCollection = true;
356
            Strategy = "FLY";
357
        }
358
    }
359
// Стратегия GI(1-10)
360
// =======================================================
361
    function GI() {
362
        lastGamePlay = engine.lastGamePlay();
363
        console.log("Последние два коэфициента " + busts[0] + " / " + busts[1]);
364
        if (lastGamePlay == "LOST") {
365
            GI_bet = GI_bet * 2;
366
            if (GI_bet > maxBet) {
367
                maxBet = GI_bet;
368
            }
369
            if (loseGames > 6) {
370
                loseGames = 0;
371
                GI_bet = baseBet;
372
            }
373
        } else if (lastGamePlay == "WON") {
374
            GI_bet = baseBet;
375
            loseGames = 0;
376
        }
377
        if ((busts[0] < 1.97) && (busts[1] < 1.97)) {
378
            falseGames++;
379
            if (falseGames > 3) {
380
                GI_crash = 0;
381
                for (i = 5; i >= 2; i--) {
382
                    var arrL = busts;
383
                    var s_CR = stepCR(arrL, i);
384
                    var arrL = busts;
385
                    var s_MA = stepMA(arrL, i);
386
                    if (((s_CR > 0) && (s_MA > 0)) && (s_CR > s_MA)) {
387
                        GI_crash = i;
388
                        break;
389
                    }
390
                }
391
                if (GI_crash > 0) {
392
                    console.log("======GI 2R======");
393
                    console.log("   Ставка: " + GI_bet);
394
                    console.log("   Коэфициент: " + GI_crash);
395
                    console.log(" ");
396
                    placeBet(GI_bet, GI_crash, false);
397
                }
398
                falseGames = 0;
399
            } else {
400
                console.log("Условие на 2 красных выполнено. Осталось дождаться ещё " + (3 - falseGames) + " совпадений данного условия.");
401
            }
402
        } else {
403
            console.log("Условие на 2 красных не выполнено. Ждем.");
404
        }
405
    }
406
// Стратегия FLY(1.05)
407
// =======================================================
408
    function FLY() {
409
        if (lastGamePlay == "LOST") {
410
            loses++;
411
            if (loses % 2) {
412
                FLY_bet++;
413
            }
414
            FLY_crash = FLY_crash + (0.3 + (loses / 100));
415
        } else if (lastGamePlay == "WON") {
416
            loses = 0;
417
            FLY_bet = 1;
418
            FLY_crash = 10;
419
        }
420
        placeBet(FLY_bet, FLY_crash, false);
421
    }
422
// Стратегия PI(1.37)
423
// =======================================================
424
    function PI() {
425
        if (lastGamePlay == "LOST") {
426
            var multiple = 2.3;
427
            loses++;
428
            if (loses > 3) {
429
                var t_s = (losePeriods.length > 0) ? losePeriods[0] : timeStart;
430
                var t_e = Date.now();
431
                losePeriods.push(t_e - t_s);
432
            }
433
            wins = 0;
434
            if (loses > loseGames) {
435
                loseGames = loses;
436
                timeToloseGames = Date.now();
437
            }
438
            if (loses > 4) {
439
                PI_bet = 1;
440
            } else {
441
                if (busts[0] != 0) {
442
                    PI_bet = Math.floor(PI_bet * multiple * busts[0]);
443
                } else {
444
                    PI_bet = Math.floor(PI_bet * 3);
445
                }
446
            }
447
            if (PI_bet > maxBet) {
448
                maxBet = PI_bet;
449
                timeToMaxBet = Date.now();
450
            }
451
        } else if (lastGamePlay == "WON") {
452
            wins++;
453
            if (wins > 3) {
454
                var t_s = (winsPeriods.length > 0) ? winsPeriods[0] : timeStart;
455
                var t_e = Date.now();
456
                winsPeriods.push(t_e - t_s);
457
            }
458
            if (wins > winGames) {
459
                winGames = wins;
460
                timeTowinGames = Date.now();
461
            }
462
            PI_bet = baseBet;
463
            loses = 0;
464
        }
465
        var PI_crash = 0;
466
        var m1Busts = busts.slice();
467
        var m2Busts = busts.slice();
468
        var m3Busts = busts.slice();
469
        var sa = parseFloat(mean(m1Busts).toFixed(2));
470
        var se = parseFloat(median(m2Busts).toFixed(2));
471
        var chi = parseFloat(mode(m3Busts).toFixed(2));
472
        if (sa > 0 && se > 0 && chi > 0) {
473
            if ((se * 2 < sa) && (se > chi) && (se > 1.1)) {
474
                if (getProc() > procStop && lastGamePlay != "LOST") {
475
                    if (stopped == 0) {
476
                        stopped = Date.now() + parseInt(Math.random() * 10800000 + 1);
477
                    }
478
                    var lastTime = new Date(stopped - Date.now());
479
                    if (lastTime > 0) {
480
                        console.log("======PI T1======");
481
                        console.log("Игра окончена. Следующий старт игры через [" + getTime(lastTime) + "]");
482
                        console.log(" ");
483
                    } else {
484
                        stopped = 0;
485
                        procStop += baseStop;
486
                    }
487
                }
488
                PI_crash = parseFloat(((Math.random() * (se - chi)) + chi).toFixed(2));
489
                console.log("======PI T1======");
490
                console.log("   Ставка: " + PI_bet);
491
                console.log("   Коэфициент: " + PI_crash);
492
                console.log(" ");
493
                placeBet(PI_bet, PI_crash, false);
494
            }
495
            console.log("======PI T1======");
496
            console.log("   SA: " + sa);
497
            console.log("   SE: " + se);
498
            console.log("   CHI: " + chi);
499
            console.log(" ");
500
        } else {
501
            console.log("======PI T1======");
502
            console.log("   SA: " + sa);
503
            console.log("   SE: " + se);
504
            console.log("   CHI: " + chi);
505
            console.log(" ");
506
        }
507
    }
508
// Стратегия PlusCoup
509
// =======================================================
510
    function PlusCoup() {
511
        console.log("======PlusCoup IS NOT DEFINED MODE======");
512
        console.log("======END GAME PLEASE======");
513
    }
514
    if (!dataCollection) {
515
        DataCollection(0);
516
    } else {
517
        switch (Strategy) {
518
            case "GI":
519
                GI();
520
                break;
521
            case "FLY":
522
                FLY();
523
                break;
524
            case "PI":
525
                PI();
526
                break;
527
            case "PlusCoup":
528
                PlusCoup();
529
                break;
530
        }
531
    }
532
}