function bet(uint8[] _numbers, uint256 betValue, address inviter) public payable isHuman whenNotPaused whenRoundStart returns(bool){
        require( _numbers.length <= 16 , "_numbers length error");
        require( betValue >= 0.05 ether, "bet value error");
        __dealLastRound(msg.sender);
        __addShare(msg.sender, roundId);
        require( msg.value.add(playerInfo[msg.sender].val) >= betValue, 'value not enough');
        if(msg.value < betValue){
            playerInfo[msg.sender].val = playerInfo[msg.sender].val.sub(betValue.sub(msg.value));
        }
        
        playerInfo[msg.sender].lrnd = roundId;
        uint _index = roundInfo[roundId].bets.length;
        roundInfo[roundId].bets.push(
            Boom3datasets.Bet({
                user: msg.sender,
                time: now,
                numbers: _numbers,
                odds: __calcuOdds(_numbers),
                value: betValue,
                result: [0, 0, 0],
                refund: false
            })
        );
        playerRoundInfo[msg.sender][roundId].bets.push(_index);
        
        if (playerInfo[msg.sender].laff == address(0) && inviter != address(0) && inviter != msg.sender) {
            playerInfo[msg.sender].laff = inviter;
            playerInfo[inviter].inum++;
        }
        
        __sendRandomQuery(_index);
        return true;
    }