Pages:
Author

Topic: Seuntjies DiceBot -Multi-Site, multi-strategy betting bot for dice. With Charts! - page 8. (Read 274897 times)

copper member
Activity: 20
Merit: 0
I will try simulating with KryGamesBot Smiley

Can you give me an example of how to import a preset list? I am a little lost here.  Shocked

Thanks
legendary
Activity: 1717
Merit: 1125
Hi @Seunjie

Awesome new bot, I will definitely download it and check it out.
I got a question, is it possible to speed-up simulating a script on high-end machines in dicebot?

Thanks Grin

Try using KryGamesBot's simulator.

But if you're referring to multi-threading the simulations, unfortunately not. The simulation is a serial workload because every bet depends on the result of the bet before it, so it can't be parallelized to take advantage of more than 1 core.
copper member
Activity: 20
Merit: 0
Hi @Seunjie

Awesome new bot, I will definitely download it and check it out.
I got a question, is it possible to speed-up simulating a script on high-end machines in dicebot?

Thanks Grin
legendary
Activity: 1717
Merit: 1125
Is it possible to run multiple instance betting on the same currency but different session?

what do you mean with different sessions?

Never run more than 1 session/instance/bot on the same account, even if you are using different currencies.


If you want to bet on different accounts/sites, you can use the "new tab" button at the top right or in the menu at the top left.



Hopefully the GUIs for those OSes won't be too far away.


They probably won't be available until the official launch of the bot
newbie
Activity: 5
Merit: 0
Is it possible to run multiple instance betting on the same currency but different session?
HCP
legendary
Activity: 2086
Merit: 4363
Kry Games Bot - Version 4 of Seuntjies DiceBot (Public Alpha)
Some "good" news on a Monday... was not expecting this announcement! Wink


KryGamesBot has a UI version that is (for now) windows only and a cross platform Console version
This is potentially going to make a few people quite happy... Having a MacOSX and Linux version available is a big step!

Hopefully the GUIs for those OSes won't be too far away.


It's important to note that the API for the programmer mode has changed since v3 and old programmer mode scripts will not work.
Guess I have some reading to do! Wink
legendary
Activity: 2198
Merit: 1014
Bitdice is scam scam scammmmmmmmmmmmmmmmmmmmmmmmmm
Awesome! Can't wait to try it, downloading.  Smiley
How did you pick this name? It's bit weird Smiley
legendary
Activity: 1717
Merit: 1125
KryGamesBot.com

Kry Games Bot - Version 4 of Seuntjies DiceBot (Public Alpha)

The files you can download on the site are alpha version of the new KryGamesBot, the long awaited version 4 of Seuntjies DiceBot.

KryGamesBot has a UI version that is (for now) windows only and a cross platform Console version

Please note that KryGameBot is currently in an ALPHA state, this means that not all features are fully developed and some of the available features has not been thoroughly tested. Please be careful when using the bot, as there are a lot of bugs, do not risk more than you can afford to lose. If you do encounter any bugs, please report them using the links at the bottom of this post.
I take no responsibility for any losses caused directly or indirectly from using this software.

Programmer Modes
It's important to note that the API for the programmer mode has changed since v3 and old programmer mode scripts will not work.
Included in the download is a word document that details the new API as well as a ReadMe that details some of the programmer mode and some other settings.

Get in touch
Report a bug or request a feature (Github)
Have a chat with the community (Discord)
Ask some questions (Forum)
Email me ([email protected])
Twitter
Watch me play games when I'm too tired to work

Source Code
Doormat - Core library that aims to wrap Crypto Casino site APIs into a single, standardized package.
DoormatBot - Implements the Doormat library into an auto betting bot that can utilize several strategies and more.
KryGamesBot - A visual interface for DoormatBot with some cool extra features.
newbie
Activity: 2
Merit: 0
Sure, I've pushed my latest changes, though you'll see the only changes are updating the version no in cDiceBot.cs and About.cs, and extra logging for wolf.bet. The rest of the changes for v 3.4.10.1 were pushed before the update

Thanks!
legendary
Activity: 1717
Merit: 1125
Hi, Seuntjie!
Today I've downloaded source code from github, but it is 3.4.9 version. Could you upload the latest version, please?

Sure, I've pushed my latest changes, though you'll see the only changes are updating the version no in cDiceBot.cs and About.cs, and extra logging for wolf.bet. The rest of the changes for v 3.4.10.1 were pushed before the update
newbie
Activity: 2
Merit: 0
Hi, Seuntjie!
Today I've downloaded source code from github, but it is 3.4.9 version. Could you upload the latest version, please?
legendary
Activity: 1717
Merit: 1125
Hi @Seuntjie!

Thanks for your quick reply to my previous questions.
I am dealing with another thing at the moment.

You know how we sometimes receive the 'bet result received does not match last bet placed! stopping for your safety' error?

I know how to restart my scripts using the start() command in lua, but is there a way to add a piece of code where the script would 'remember' where it was before it received the error?

That way I can, for example, continue a martingale right after instead of starting all over again.

Thank you.

Take a look at the pattern in https://forum.seuntjie.com/index.php?topic=2.msg2195#msg2195

It does basically what you need if you alter your script to initialize your variables in the right place, but like HCP said, the more complex your script, the harder it becomes.
HCP
legendary
Activity: 2086
Merit: 4363
The short answer is "No".

The much longer answer is that ass soon as you use start() all the initialisation at the beginning of your script is executed... so the "state" is completely wiped and you start from the very beginning again.

Depending on how complex your script is, you might be able to fashion a "dumpState()" type function that would dump all the current value of all the variables you are using in your script into a table as it iterates through each "dobet" cycle.

That way, you could see the "state" showing in the output log. It should then be theoretically possible to copy/paste that table data into the beginning of your script with some "loadState()" type function that could then initialise all your variables to what they were when the script stopped.

Again, how complicated your script is would dictate whether this was viable and how badly it would affect the performance of the script.

So for example... something like this:
Code:
initialBet = 0.00000003
count = 0

dataDump = {count=5,bet=0.00000015}
loadData = True

function loadState()
  count = dataDump["count"]
  nextbet = dataDump["bet"]
end

if loadData then loadState() end

function dobet()
  print("dataDump = {count=" .. count .. ",bet=" .. nextbet .."}")
....
end

Every time through dobet(), it would dump out the 'dataDump' table string... if the script crashes, you copy/paste that back into the top of the script and set loadData = True. If you want the script to just start normally and use the 'default' values, you set loadData = False and the data would not be loaded.

But yeah, depending on how many variables, counters, flags, loops etc... it could get very messy very quickly.
copper member
Activity: 20
Merit: 0
Hi @Seuntjie!

Thanks for your quick reply to my previous questions.
I am dealing with another thing at the moment.

You know how we sometimes receive the 'bet result received does not match last bet placed! stopping for your safety' error?

I know how to restart my scripts using the start() command in lua, but is there a way to add a piece of code where the script would 'remember' where it was before it received the error?

That way I can, for example, continue a martingale right after instead of starting all over again.

Thank you.
HCP
legendary
Activity: 2086
Merit: 4363
Is there any way someone could make the lightguide script from bustabit work on the dicebot?  I'll paste the script below too see if anyone thinks they could do it.  It would be amazing if someone could
Two things... first up, you might want to ask over in the programmer thread here on BitcoinTalk: https://bitcointalksearch.org/topic/seuntjie-dice-bot-programmers-mode-discussion-1114503
or on the Bot forum: https://forum.seuntjie.com/index.php?board=4.0

Secondly... if you're going to copy/paste a large piece of code into a post... you should use the "code" tags... like this:
Code:
var config = {
    wager: {
      value: 100,
      type: 'balance',
      label: 'Base bet'
    },
    payout: {
      value: 2,
      type: 'multiplier',
      label: 'Coeff to wait for'
    },
    // limit_script_balance: {
    //   value: 100000,
    //   type: 'balance',
    //   label: 'Maximum lose'
    // }
  };
  // https://mtihc.github.io/bustabit-script-simulator/
  let wantedProfitInBits = config.wager.value / 100;
  let netProfit = 0;
  let baseList = [];
  let currentGamesPlayed = 0;
  let maxBet = 0;
  let balanceNeeded = 0;
  let wins = 0;
  let loses = 0;
  let currentlyPlaying = true;
  let SPLIT_INTO = 3;
  var MAX_LOSE = 0;
  var SESSION_NET_PROFIT = 0;
  var SESSION_MAX_BALANCE_NEEDED = 0;
  var ALL_GAMES = [];
  var SESSION_TIMES_ENTERED = 0;
  addLast50();
  var SMALL_SESSION_NET_PROFIT = 0;
  // generateLastNGames(engine.history.first().hash, 100);
 
  function addLast50() {
    var LATEST_50_GAMES = engine.history.toArray();
    // logTime(`LATEST_50 length ${LATEST_50_GAMES.length}`)
    for (let i = 0; i <= LATEST_50_GAMES.length - 1; i++) {
      ALL_GAMES.unshift(LATEST_50_GAMES[i].bust);
    }
    ALL_GAMES.push(engine.history.first().bust)
    for (var i = 0; i < ALL_GAMES.length - 1; i++) {
      // logTime(`id ${i} ${ALL_GAMES[i]}`);
    }
  }
 
  function getLastNWinPercentage(n, targetPayout) {
    let wins = 0;
    let loses = 0;
    let elements_used = 0
    for (let i = ALL_GAMES.length - 1; i > -1 && i > ALL_GAMES.length - 1 - n; i--) {
      elements_used++;
      if (ALL_GAMES[i] < targetPayout) {
        loses++;
      } else {
        wins++;
      }
    }
    let percentage = (wins / elements_used) * 100
    logTime(`L${elements_used} wins: ${percentage} %`);
    return percentage;
  }
 
 
  initScript();
 
 
  function getCurrentBetLightGuide() {
    let currentMultiplier = 0;
    let currentBet = null;
    if (netProfit >= 0 && currentGamesPlayed > 0) {
      return currentBet;
    }
    if (baseList.length >= 2) {
      currentMultiplier = baseList[0] + baseList[baseList.length - 1];
      currentBet = (currentMultiplier * config.wager.value);
    } else if (baseList.length === 1) {
      currentMultiplier = baseList[0];
      currentBet = (currentMultiplier * config.wager.value) * 2;
    } else {
      currentMultiplier = null;
    }
    return currentBet;
  }
 
  function initScript() {
 
    logTime(`Starting in game ${engine.history.first().id}`);
    // Want to earn: ` + wantedProfitInBits + ' bits. Splliting into: ' + SPLIT_INTO);
    SESSION_TIMES_ENTERED += 1;
    // let wanted_statistics = [800, 700, 600, 500, 400, 300, 200, 150, 100, 50, 40, 30, 20, 10];
    // wanted_statistics.forEach(function (element) {
    //   getLastNWinPercentage(element, 2);
    // })
    logTime('------------------------------------------------')
    // TO DO: Uncomment
    // for (let i = 1; i <= SPLIT_INTO; i++) {
    //   baseList.push(Math.round(wantedProfitInBits / SPLIT_INTO) * 100)
    // }
    baseList = [1, 2, 3];
    netProfit = 0;
    currentGamesPlayed = 0;
    maxBet = 0;
    balanceNeeded = 0;
    wins = 0;
    loses = 0;
    currentlyPlaying = true;
    SMALL_SESSION_NET_PROFIT = 0;
  }
 
  // Try to bet immediately when script starts
  if (engine.gameState === "GAME_STARTING") {
    makeBet();
  }
 
  engine.on('GAME_STARTING', onGameStarted);
  engine.on('GAME_ENDED', onGameEnded);
 
  function onGameStarted() {
    if (!currentlyPlaying) {
      initScript();
    }
    let currentBet = getCurrentBetLightGuide();
 
    if (!currentBet) {
      currentlyPlaying = false;
      printEndStatus();
      // engine.on('GAME_STARTING', function(){});
      initScript();
    }
    makeBet();
  }
 
  function onGameEnded() {
    ALL_GAMES.push(engine.history.first().bust);
    let lastGame = engine.history.first();
    // If we wagered, it means we played
    if (!lastGame.wager) {
      return;
    }
    let lastBet = getCurrentBetLightGuide();
 
    if (lastGame.cashedAt) {
      let profit = Math.round(((lastBet * config.payout.value) - lastBet) / 100);
      netProfit += profit;
      SESSION_NET_PROFIT += profit;
      SMALL_SESSION_NET_PROFIT += profit
      logTime(`Won ${profit} bits`);
      if (baseList.length > 1) {
        baseList.splice(baseList.length - 1, 1);
      }
      baseList.splice(0, 1);
      wins += 1;
    } else {
      var lost = lastBet / 100;
      logTime(`Lost ${lost} bits`);
      netProfit -= lost;
      SESSION_NET_PROFIT -= lost;
      baseList.push(lastBet / config.wager.value);
      loses += 1;
    }
    currentGamesPlayed += 1;
    // logTime(`Net profit: ${netProfit} Current bet: ${getCurrentBetLightGuide() / 100}`);
    let currentBalanceNeeded = netProfit + ((getCurrentBetLightGuide() / 100) * -1);
    if (currentBalanceNeeded < balanceNeeded) {
      balanceNeeded = currentBalanceNeeded;
    }
 
    if (currentBalanceNeeded < SESSION_MAX_BALANCE_NEEDED) {
      SESSION_MAX_BALANCE_NEEDED = currentBalanceNeeded;
    }
 
    logTime('Net profit: ' + netProfit + ' bits. Left to play: ' + baseList.length);
  }
 
  function printEndStatus() {
    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) + ' %');
    logTime(`SESSION NET PROFIT ${SESSION_NET_PROFIT} bits, SESSION MAX BALANCE NEEDED ${SESSION_MAX_BALANCE_NEEDED} bits, SESSION TIMES ENTERED ${SESSION_TIMES_ENTERED}`)
  }
 
  function makeBet() {
    let currentBet = getCurrentBetLightGuide();
    if (!currentBet) {
      printEndStatus();
      return;
    }
    engine.bet(currentBet, config.payout.value);
    if (currentBet > maxBet) {
      maxBet = currentBet;
    }
    logTime('betting ' + Math.round(currentBet / 100) + ' on ' + config.payout.value + ' x');
  }
 
  function logTime(msg) {
    let today = new Date();
    let calendarDate = `${today.getDate()}-${today.getMonth() + 1}-${today.getFullYear()}`;
    let now = `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`;
    log(`${now} ${msg}`);
  }

It keeps your post a lot tidier... and it stops the forum from interpretting things like the [ i ] in your code as text formatting Wink
newbie
Activity: 1
Merit: 0
Is there any way someone could make the lightguide script from bustabit work on the dicebot?  I'll paste the script below too see if anyone thinks they could do it.  It would be amazing if someone could


var config = {
    wager: {
      value: 100,
      type: 'balance',
      label: 'Base bet'
    },
    payout: {
      value: 2,
      type: 'multiplier',
      label: 'Coeff to wait for'
    },
    // limit_script_balance: {
    //   value: 100000,
    //   type: 'balance',
    //   label: 'Maximum lose'
    // }
  };
  // https://mtihc.github.io/bustabit-script-simulator/
  let wantedProfitInBits = config.wager.value / 100;
  let netProfit = 0;
  let baseList = [];
  let currentGamesPlayed = 0;
  let maxBet = 0;
  let balanceNeeded = 0;
  let wins = 0;
  let loses = 0;
  let currentlyPlaying = true;
  let SPLIT_INTO = 3;
  var MAX_LOSE = 0;
  var SESSION_NET_PROFIT = 0;
  var SESSION_MAX_BALANCE_NEEDED = 0;
  var ALL_GAMES = [];
  var SESSION_TIMES_ENTERED = 0;
  addLast50();
  var SMALL_SESSION_NET_PROFIT = 0;
  // generateLastNGames(engine.history.first().hash, 100);
 
  function addLast50() {
    var LATEST_50_GAMES = engine.history.toArray();
    // logTime(`LATEST_50 length ${LATEST_50_GAMES.length}`)
    for (let i = 0; i <= LATEST_50_GAMES.length - 1; i++) {
      ALL_GAMES.unshift(LATEST_50_GAMES.bust);
    }
    ALL_GAMES.push(engine.history.first().bust)
    for (var i = 0; i < ALL_GAMES.length - 1; i++) {
      // logTime(`id ${i} ${ALL_GAMES}`);
    }
  }
 
  function getLastNWinPercentage(n, targetPayout) {
    let wins = 0;
    let loses = 0;
    let elements_used = 0
    for (let i = ALL_GAMES.length - 1; i > -1 && i > ALL_GAMES.length - 1 - n; i--) {
      elements_used++;
      if (ALL_GAMES < targetPayout) {
        loses++;
      } else {
        wins++;
      }
    }
    let percentage = (wins / elements_used) * 100
    logTime(`L${elements_used} wins: ${percentage} %`);
    return percentage;
  }
 
 
  initScript();
 
 
  function getCurrentBetLightGuide() {
    let currentMultiplier = 0;
    let currentBet = null;
    if (netProfit >= 0 && currentGamesPlayed > 0) {
      return currentBet;
    }
    if (baseList.length >= 2) {
      currentMultiplier = baseList[0] + baseList[baseList.length - 1];
      currentBet = (currentMultiplier * config.wager.value);
    } else if (baseList.length === 1) {
      currentMultiplier = baseList[0];
      currentBet = (currentMultiplier * config.wager.value) * 2;
    } else {
      currentMultiplier = null;
    }
    return currentBet;
  }
 
  function initScript() {
 
    logTime(`Starting in game ${engine.history.first().id}`);
    // Want to earn: ` + wantedProfitInBits + ' bits. Splliting into: ' + SPLIT_INTO);
    SESSION_TIMES_ENTERED += 1;
    // let wanted_statistics = [800, 700, 600, 500, 400, 300, 200, 150, 100, 50, 40, 30, 20, 10];
    // wanted_statistics.forEach(function (element) {
    //   getLastNWinPercentage(element, 2);
    // })
    logTime('------------------------------------------------')
    // TO DO: Uncomment
    // for (let i = 1; i <= SPLIT_INTO; i++) {
    //   baseList.push(Math.round(wantedProfitInBits / SPLIT_INTO) * 100)
    // }
    baseList = [1, 2, 3];
    netProfit = 0;
    currentGamesPlayed = 0;
    maxBet = 0;
    balanceNeeded = 0;
    wins = 0;
    loses = 0;
    currentlyPlaying = true;
    SMALL_SESSION_NET_PROFIT = 0;
  }
 
  // Try to bet immediately when script starts
  if (engine.gameState === "GAME_STARTING") {
    makeBet();
  }
 
  engine.on('GAME_STARTING', onGameStarted);
  engine.on('GAME_ENDED', onGameEnded);
 
  function onGameStarted() {
    if (!currentlyPlaying) {
      initScript();
    }
    let currentBet = getCurrentBetLightGuide();
 
    if (!currentBet) {
      currentlyPlaying = false;
      printEndStatus();
      // engine.on('GAME_STARTING', function(){});
      initScript();
    }
    makeBet();
  }
 
  function onGameEnded() {
    ALL_GAMES.push(engine.history.first().bust);
    let lastGame = engine.history.first();
    // If we wagered, it means we played
    if (!lastGame.wager) {
      return;
    }
    let lastBet = getCurrentBetLightGuide();
 
    if (lastGame.cashedAt) {
      let profit = Math.round(((lastBet * config.payout.value) - lastBet) / 100);
      netProfit += profit;
      SESSION_NET_PROFIT += profit;
      SMALL_SESSION_NET_PROFIT += profit
      logTime(`Won ${profit} bits`);
      if (baseList.length > 1) {
        baseList.splice(baseList.length - 1, 1);
      }
      baseList.splice(0, 1);
      wins += 1;
    } else {
      var lost = lastBet / 100;
      logTime(`Lost ${lost} bits`);
      netProfit -= lost;
      SESSION_NET_PROFIT -= lost;
      baseList.push(lastBet / config.wager.value);
      loses += 1;
    }
    currentGamesPlayed += 1;
    // logTime(`Net profit: ${netProfit} Current bet: ${getCurrentBetLightGuide() / 100}`);
    let currentBalanceNeeded = netProfit + ((getCurrentBetLightGuide() / 100) * -1);
    if (currentBalanceNeeded < balanceNeeded) {
      balanceNeeded = currentBalanceNeeded;
    }
 
    if (currentBalanceNeeded < SESSION_MAX_BALANCE_NEEDED) {
      SESSION_MAX_BALANCE_NEEDED = currentBalanceNeeded;
    }
 
    logTime('Net profit: ' + netProfit + ' bits. Left to play: ' + baseList.length);
  }
 
  function printEndStatus() {
    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) + ' %');
    logTime(`SESSION NET PROFIT ${SESSION_NET_PROFIT} bits, SESSION MAX BALANCE NEEDED ${SESSION_MAX_BALANCE_NEEDED} bits, SESSION TIMES ENTERED ${SESSION_TIMES_ENTERED}`)
  }
 
  function makeBet() {
    let currentBet = getCurrentBetLightGuide();
    if (!currentBet) {
      printEndStatus();
      return;
    }
    engine.bet(currentBet, config.payout.value);
    if (currentBet > maxBet) {
      maxBet = currentBet;
    }
    logTime('betting ' + Math.round(currentBet / 100) + ' on ' + config.payout.value + ' x');
  }
 
  function logTime(msg) {
    let today = new Date();
    let calendarDate = `${today.getDate()}-${today.getMonth() + 1}-${today.getFullYear()}`;
    let now = `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`;
    log(`${now} ${msg}`);
  }
legendary
Activity: 1717
Merit: 1125
Thanks Seuntjie!

I also got a different question; is there a way to reset the seed when profit = x amount?

I only see support for seed resetting on x amount of bets/wins or losses.

Thanks

Not from the advanced mode no, but you can using the programmer mode
copper member
Activity: 20
Merit: 0
Thanks Seuntjie!

I also got a different question; is there a way to reset the seed when profit = x amount?

I only see support for seed resetting on x amount of bets/wins or losses.

Thanks
legendary
Activity: 1717
Merit: 1125
Hi seuntjie.

I can't login to stake with dicebot. They seem to have made some changes.
Will there be a new version soon?

Thanks
https://forum.seuntjie.com/index.php?topic=1334.msg2318#msg2318

Logins are working normally again.
copper member
Activity: 20
Merit: 0
Hi seuntjie.

I can't login to stake with dicebot. They seem to have made some changes.
Will there be a new version soon?

Thanks
Pages:
Jump to: