diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 91240f3..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.example.env b/.example.env new file mode 100755 index 0000000..32817ef --- /dev/null +++ b/.example.env @@ -0,0 +1 @@ +APP_DEBUG=true [APP] DEFAULT_TIMEZONE=Asia/Shanghai [DATABASE] TYPE=mysql HOSTNAME=127.0.0.1 DATABASE=tnt_game USERNAME=root PASSWORD=shuijizai720 HOSTPORT=3306 CHARSET=utf8 DEBUG=true [LANG] default_lang=zh-cn [SYSTEM] WEBSOCKET=ws.poker4u.club PROTOCOL=https LOGO_PATH=/static/logo/fop_180_180.png PLAYER=https://i.55player.com/zb.html dt_half = 1 SB_SERVER=http://192.168.6.32:8080 [SWOOLE] HOST=127.0.0.1 PORT=8082 DAEMONIZE=false [DOMAIN] CONSOLE=cz.poker4u.club BET=bet.poker4u.club \ No newline at end of file diff --git a/.gitignore b/.gitignore index b4a7d40..df81344 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ .ace-tool/ +.DS_Store +runtime/ +vendor/ +.magi/ diff --git a/app/.DS_Store b/app/.DS_Store deleted file mode 100644 index c5bcafc..0000000 Binary files a/app/.DS_Store and /dev/null differ diff --git a/app/ExceptionHandle.php b/app/ExceptionHandle.php index 453d126..ad8ac07 100644 --- a/app/ExceptionHandle.php +++ b/app/ExceptionHandle.php @@ -36,7 +36,13 @@ class ExceptionHandle extends Handle */ public function report(Throwable $exception): void { - // 使用内置的方式记录异常日志 + if (!$this->isIgnoreReport($exception)) { + \app\utils\Logger::error(\app\utils\Logger::CAT_ERROR, $exception->getMessage(), [ + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + 'trace' => substr($exception->getTraceAsString(), 0, 2000), + ]); + } parent::report($exception); } diff --git a/app/common.php b/app/common.php index 570444c..6501d6d 100644 --- a/app/common.php +++ b/app/common.php @@ -3,7 +3,10 @@ //应用公共文件 // 版本号 -define('VERSION_V','?ver=v10.0.1'); +define('VERSION_V','?ver=v10.1.1'); + +// 强制加载中文语言包 +\think\facade\Lang::load(__DIR__ . '/lang/zh-cn.php'); // 加密秘钥 const UC_AUTH_KEY = 'L=isPost()) return json(['status' => 0]); + $data = Request::instance()->post(); + \app\utils\Logger::error(\app\utils\Logger::CAT_FRONTEND, $data['message'] ?? 'unknown', [ + 'source' => $data['source'] ?? 'unknown', + 'type' => $data['type'] ?? 'error', + 'stack' => isset($data['stack']) ? substr($data['stack'], 0, 2000) : '', + 'file' => $data['file'] ?? '', + 'url' => $data['url'] ?? '', + 'line' => $data['line'] ?? '', + 'col' => $data['col'] ?? '', + 'ua' => Request::instance()->header('user-agent', ''), + 'ip' => Request::instance()->ip(), + ]); + return json(['status' => 1]); + } + function get_lang(): Json { if (!Request::instance()->isPost()) return json(); @@ -157,7 +175,7 @@ class Index extends Common{ $forecast = intval(Request::instance()->post('forecast')); // 验证靴ID if($bootId > 0){ - $ns = NumberTab::getByBootIdDone($bootId,'result,pair'); + $ns = NumberTab::getByBootIdDone($bootId,'result,pair,luck_six,dragon_seven,panda_eight'); if($forecast == 1){ // 庄问路 $ns[] = array('result'=>1,'pair'=>0); diff --git a/app/handle/controller/Log.php b/app/handle/controller/Log.php new file mode 100644 index 0000000..772450f --- /dev/null +++ b/app/handle/controller/Log.php @@ -0,0 +1,36 @@ +isPost()) return json(['status' => 0]); + $data = Request::instance()->post(); + if (empty($data)) { + $raw = Request::instance()->getContent(); + $data = json_decode($raw, true) ?: []; + } + if (empty($data)) { + $raw2 = file_get_contents('php://input'); + $data = json_decode($raw2, true) ?: []; + } + \app\utils\Logger::error(\app\utils\Logger::CAT_FRONTEND, $data['message'] ?? 'unknown', [ + 'source' => $data['source'] ?? 'unknown', + 'type' => $data['type'] ?? 'error', + 'stack' => isset($data['stack']) ? substr($data['stack'], 0, 2000) : '', + 'file' => $data['file'] ?? '', + 'url' => $data['url'] ?? '', + 'line' => $data['line'] ?? '', + 'col' => $data['col'] ?? '', + 'ua' => Request::instance()->header('user-agent', ''), + 'ip' => Request::instance()->ip(), + ]); + return json(['status' => 1]); + } +} diff --git a/app/handle/lang/zh-cn.php b/app/handle/lang/zh-cn.php new file mode 100644 index 0000000..3d745de --- /dev/null +++ b/app/handle/lang/zh-cn.php @@ -0,0 +1,600 @@ + +// +---------------------------------------------------------------------- + +// 核心中文语言包 +return [ + // 操作端 和 swoole文件 简体中文语言包 + 'lang' => 'zh-cn', + 'table' => '桌台', + 'boot' => '靴数', + 'number' => '局数', + 'now_time' => '当前时间', + 'login_fail' => '登录失败', + + 'banker' => '庄', + 'player' => '闲', + 'tie' => '和', + 'banker_pair' => '庄对', + 'player_pair' => '闲对', + 'both_pair' => '庄闲对', + 'pair' => '对子', + 'big' => '大', + 'small' => '小', + 'dragon' => '龙', + 'tiger' => '虎', + 'win_6' => '赢6', + 'is_win_6' => '是否赢6', + 'luck_6' => '幸运6', + 'commission' => '抽佣', + 'free_commission' => '免佣', + 'round_host' => '本局为庄家', + 'banker_full' => '庄', + 'player_full' => '闲', + 'tie_full' => '和', + 'banker_pair_full' => '庄对', + 'player_pair_full' => '闲对', + 'both_pair_full' => '庄闲对', + 'dragon_full' => '龙', + 'tiger_full' => '虎', + 'player_1' => '闲1', + 'player_2' => '闲2', + 'player_3' => '闲3', + 'player_1_flat' => '闲1平倍', + 'player_1_double' => '闲1翻倍', + 'banker_player_1_flat' => '庄(闲1)平倍', + 'banker_player_1_double' => '庄(闲1)翻倍', + 'player_2_flat' => '闲2平倍', + 'player_2_double' => '闲2翻倍', + 'banker_player_2_flat' => '庄(闲2)平倍', + 'banker_player_2_double' => '庄(闲2)翻倍', + 'player_3_flat' => '闲3平倍', + 'player_3_double' => '闲3翻倍', + 'banker_player_3_flat' => '庄(闲3)平倍', + 'banker_player_3_double' => '庄(闲3)翻倍', + 'bull_0' => '无牛', + 'bull_1' => '牛一', + 'bull_2' => '牛二', + 'bull_3' => '牛三', + 'bull_4' => '牛四', + 'bull_5' => '牛五', + 'bull_6' => '牛六', + 'bull_7' => '牛七', + 'bull_8' => '牛八', + 'bull_9' => '牛九', + 'bull_bull' => '牛牛', + '5_bulls' => '五公', + 'yes' => '是', + 'no' => '否', + 'online_number' => '在线人数', + 'bet_amount' => '本局下注金额', + 'wait_For_Opening' => '停止下注-等待开盘', + 'point' => '点', + 'void' => '已作废', + + 'next' => '下一局', + 'disclaimer' => '路牌资料仅供参考,如有错漏。本公司概不负责', + 'data_error' => '数据错误', + 'browser_error' => '您的浏览器不支持WebSocket', + + 'start' => '开始', + 'end' => '结束', + 'start_bet' => '接收下注', + 'end_bet' => '结束下注', + 'opening' => '提交结果', + 'shuffle' => '开始洗牌', + 'change_boot' => '换靴', + 'close_Boot' => '日结算', + 'logout' => '退出', + 'is_to_shuffle' => '是否需要将桌子的状态设置为"洗牌中"?', + 'is_to_balance' => '是否需要进行日结算?', + 'is_to_boot' => '是否需要进行换靴?', + 'need_a_result' => '请选择要修改的结果', + 'is_to_logout' => '是否退出登录?', + + 'edit_previous_result' => '修改上一局结果', + 'select_result' => '选择结果', + 'select' => '请选择', + 'monday' => '星期一', + 'tuesday' => '星期二', + 'wednesday' => '星期三', + 'thursday' => '星期四', + 'friday' => '星期五', + 'saturday' => '星期六', + 'sunday' => '星期日', + + 'user_not_exist' => '用户不存在', + 'table_not_run' => '该桌子暂时没有营运', + 'tableNotRun' => '该桌子暂时没有营运', + 'bet_fail' => '下注失败,服务器链接失败', + 'no_right' => '你无权操作', + + 'bet_status_1' => '接受下注', + 'bet_status_0' => '尚未接受下注', + 'bet_status_2' => '停止下注-等待开盘', + + 'confirm' => '确定', + 'cancel' => '取消', + 'connect_fail' => '您已断开链接,请返回重新进入', + 'message' => '信息', + + 'table_status_0' => '桌子运营中', + 'table_status_1' => '洗牌中', + 'table_status_2' => '停台中', + + 'link_server_fail' => '与服务通讯失败', + 'link_server_fail_1' => '荷官不在线', + 'link_server_fail_2' => '与服务通讯失败2', + 'link_server_fail_3' => '与服务通讯失败3', + + 'appid_error' => 'appid 错误', + 'appsecret_error' => 'appsecret 错误', + 'appid_or_appsecret_error' => 'appid或appsecret 错误', + 'param_error' => '参数错误', + 'illegal_request' => '非法请求', + + 'balance_success' => '日结算成功', + 'balance_fail' => '日结算失败', + 'balance_fail_1' => '日结算失败1', + 'balance_fail_2' => '日结算失败2', + 'table_status_error' => '请把桌子更改为"洗牌状态"再进行日结算', + + 'boot_settle_success' => '靴结算成功', + 'boot_settle_fail' => '靴结算失败', + 'boot_settle_fail_1' => '换靴失败,该桌子还没有靴,请进行日结', + 'boot_settle_fail_2' => '换靴失败,该桌子已经结算,请重新登录再继续', + 'boot_settle_fail_3' => '该铺尚未结束,请开出结果后再换靴', + + 'start_bet_success' => '开始下注成功', + 'start_bet_fail' => '开始下注失败', + 'start_bet_fail_1' => '开始下注失败,下注铺已经开始下注或者已经停止了下注', + 'start_bet_fail_2' => '开始下注失败,下注铺信息有误', + 'start_bet_fail_3' => '操作失败,请确保桌子不是在洗牌中或者停台中状态', + + 'end_bet_success' => '结束下注成功', + 'end_bet_fail' => '结束下注失败', + 'end_bet_fail_1' => '停止下注失败,该铺还没开始接受下注或者已经停止了下注', + 'end_bet_fail_2' => '开始下注失败,下注铺信息有误', + + 'to_bet_success' => '下注成功', + 'to_bet_fail' => '下注失败', + 'to_bet_fail_1' => '余额不足,不能下注', + 'to_bet_fail_2' => '会员信息错误,不能下注', + 'to_bet_fail_3' => '已超过允许的下注时间,不能下注', + 'to_bet_fail_4' => '该局不是在可以下注的状态,不能下注', + 'to_bet_fail_5' => '下注失败,下注铺信息有误', + 'to_bet_fail_6' => '下注金额必须大于0', + 'to_bet_fail_7' => '超过50局后无法下注幸运6', + 'to_bet_fail_8' => '超过30局后无法下注大小', + + 'opening_success' => '开盘结果成功', + 'opening_fail' => '开盘结果失败', + 'opening_fail_1' => '开结果失败,请确认该局是处于停止下注的状态', + 'opening_fail_2' => '开盘失败,开盘铺信息有误', + 'opening_fail_3' => '请输入开盘结果', + 'opening_fail_4' => '下注未结束,无法开结果', + 'opening_fail_5' => '开盘失败,庄闲牌面不齐', + 'opening_fail_6' => '开牌数据不存在', + + 'retreated_success' => '修改成功', + 'retreated_fail' => '修改失败', + 'retreated_fail_1' => '请正确选择结果', + 'retreated_fail_2' => '没有上一铺数据可更改', + 'retreated_fail_3' => '靴信息错误', + 'retreated_fail_4' => '回合信息错误', + 'retreated_fail_5' => '桌子信息错误', + 'retreated_fail_6' => '游戏类型错误', + + + // PC投注页面 简体中文语言包 + 'welcome' => '欢迎您', + 'account' => '账号', + 'money' => '余额', + 'language' => '语言', + 'rule' => '规则', + 'record' => '记录', + 'user' => '个人中心', + 'log_out' => '退出游戏', + 'limit' => '限红', + + 'game' => '游戏', + 'baccarat' => '百家乐', + 'dt' => '龙虎', + 'color_plate' => '色碟', + 'sic_bo' => '骰宝', + 'roulette' => '轮盘', + 'start_date' => '开始日期', + 'end_date' => '结束日期', + 'search' => '查询', + 'ttf' => '桌台/时间/局号', + 'total' => '合计', + 'card' => '牌', + 'banker_all' => '庄', + 'player_all' => '闲', + 'tie_all' => '和', + 'banker_pair_all' => '庄对', + 'player_pair_all' => '闲对', + 'both_pair_all' => '庄闲对', + 'banker_doub_all' => '庄翻倍', + 'player_doub_all' => '闲翻倍', + 'dragon_all' => '龙', + 'tiger_all' => '虎', + + + 'full_screen' => '全屏', + 'exit_full_screen' => '退出全屏', + 'back' => '返回', + 'sound' => '声音', + 'statistics' => '统计', + 'b_query' => '庄问路', + 'p_query' => '闲问路', + 'd_query' => '龙问路', + 't_query' => '虎问路', + 'line' => '线路', + 'line_1' => '近景', + 'line_2' => '远景', + 'line_3' => '线路三', + 'lobby' => '大厅', + + 'video_line_error' => '视频线路错误', + 'lose' => '输', + 'win' => '赢', + 'to_bet_confirm_tip' => '请下注后再点击确定', + 'browser_tip' => '请使用谷歌、360、QQ、百度、火狐、或者IE10以上版本的高级浏览器进入游戏', + 'select_chip_tip' => '请选择下注筹码', + 'recharge_tip' => '余额不足,请充值', + 'instant_pot' => '即时彩池', + 'bet' => '下注', + 'settlement' => '结算结果', + 'no_bet_data' => '没有下注数据', + 'personal_limit_banker_high' => '个人限红:庄最高下注额为', + 'personal_limit_banker_low' => '个人限红:庄最低下注额为', + 'personal_limit_player_high' => '个人限红:闲最高下注额为', + 'personal_limit_player_low' => '个人限红:闲最低下注额为', + 'personal_limit_tie_high' => '个人限红:和最高下注额为', + 'personal_limit_tie_low' => '个人限红:和最低下注额为', + 'personal_limit_banker_pair_high' => '个人限红:庄对最高下注额为', + 'personal_limit_banker_pair_low' => '个人限红:庄对最低下注额为', + 'personal_limit_player_pair_high' => '个人限红:闲对最高下注额为', + 'personal_limit_player_pair_low' => '个人限红:闲对最低下注额为', + 'personal_limit_dragon_high' => '个人限红:龙最高下注额为', + 'personal_limit_dragon_low' => '个人限红:龙最低下注额为', + 'personal_limit_tiger_high' => '个人限红:虎最高下注额为', + 'personal_limit_tiger_low' => '个人限红:虎最低下注额为', + 'game_not_start' => '游戏尚未开始', + 'game_stop_bet' => '本局游戏已停止下注', + 'leave_table_tip' => '确定要离开当前游戏台吗?', + 'select_chip_tip' => '请选择下注筹码', + + + // wap电投和网投语言包 + 'coming_soon' => '即将推出', + 'game_room' => '游戏大厅', + + 'edit_pass' => '修改密码', + 'change_password' => '修改密码', + 'phone' => '联系电话', + 'last_login_time' => '上次登陆时间', + 'recharge' => '充值上分', + 'withdraw' => '申请下分', + 'bill' => '账单', + 'game_record' => '游戏记录', + 'baccarat_total_bet_count' => '百家乐总下注次数', + 'dt_total_bet_count' => '龙虎总下注次数', + 'total_cleared_wash_code' => '已结算洗码总额', + 'uncleared_total_wash_code' => '未结算洗码总额', + 'wash_rate' => '洗码率', + + 'current_password' => '请输入旧密码', + 'new_password' => '请输入新密码', + 'confirm_password' => '再次输入新密码', + 'current_password_tip' => '请输入旧密码', + 'new_password_tip' => '新密码不能小于6个字符', + 'confirm_password_tip' => '两次输入的密码不一致', + 'login_again' => '请重新登录', + 'login' => '登录', + 'sign_in' => '登录', + 'account_login' => '已有账户登录', + 'register' => '注册', + 'register_new_user' => '新用户注册', + 'password' => '密码', + 'register_password_length_tip' => '密码不能小于6个字符', + 'register_account_length_tip' => '账号不能小于6个字符', + 'register_account_exist_tip' => '账号已存在', + 'register_account_tip' => '6-20位英文.数字组成', + 'register_password_tip' => '6-20位字符.不包含空格', + 'register_confirm_password_tip' => '再输入一遍登录密码', + 'register_success' => '注册成功', + 'register_fail' => '注册失败', + + 'password_not_empty' => '旧密码或新密码不能为空', + 'change_password_success' => '修改密码成功', + 'change_password_fail' => '修改密码失败', + 'current_password_error' => '旧密码错误', + 'recharge_unsupport_tip' => '上分暂时未开启,请联系您的代理上分', + 'withdraw_unsupport_tip' => '下分暂时未开启,请联系您的代理下分', + 'select_time' => '选择时间', + 'start_time_tip' => '请选择开始时间', + 'end_time_tip' => '请选择结束时间', + + 'wash_code_amount' => '洗码量', + 'code_amount' => '码量', + 'net_code_amount' => '净码量', + 'wash_code_time' => '洗码时间', + 'extraction_method' => '提取方式', + 'deposit_money' => '存入余额', + 'setup' => '设置', + 'mute' => '静音', + 'voice' => '开声', + 'win_or_lose' => '输赢', + 'account_tip' => '请输入账号', + 'password_tip' => '请输入密码', + 'read_and_agree' => '我已阅读并同意', + 'rule_and_agreement' => '游戏规则与用户协议', + 'account_or_password_error' => '账号或密码错误', + 'account_not_exist' => '账号不存在', + 'force_offline' => '你已被管理员强制下线', + 'auto_back' => '5局内未下注自动返回游戏大厅', + + 'reset_number' => '作废', + 'is_reset_number' => '是否作废当前该局?', + 'reset_number_success' => '操作成功', + 'reset_number_fail_1' => '操作失败,该靴已经结算', + 'reset_number_fail_2' => '操作失败,该桌子已经结算', + 'reset_number_fail_3' => '操作失败,下注状态不符', + 'reset_number_msg' => '该局已重置,请重新下注', + + + + + + + + + + + + + + + + + + // 系统错误提示 + 'Undefined variable' => '未定义变量', + 'Undefined index' => '未定义数组索引', + 'Undefined offset' => '未定义数组下标', + 'Parse error' => '语法解析错误', + 'Type error' => '类型错误', + 'Fatal error' => '致命错误', + 'syntax error' => '语法错误', + + // 框架核心错误提示 + 'dispatch type not support' => '不支持的调度类型', + 'method param miss' => '方法参数错误', + 'method not exists' => '方法不存在', + 'module not exists' => '模块不存在', + 'controller not exists' => '控制器不存在', + 'class not exists' => '类不存在', + 'property not exists' => '类的属性不存在', + 'template not exists' => '模板文件不存在', + 'illegal controller name' => '非法的控制器名称', + 'illegal action name' => '非法的操作名称', + 'url suffix deny' => '禁止的URL后缀访问', + 'Route Not Found' => '当前访问路由未定义', + 'Undefined db type' => '未定义数据库类型', + 'variable type error' => '变量类型错误', + 'PSR-4 error' => 'PSR-4 规范错误', + 'not support total' => '简洁模式下不能获取数据总数', + 'not support last' => '简洁模式下不能获取最后一页', + 'error session handler' => '错误的SESSION处理器类', + 'not allow php tag' => '模板不允许使用PHP语法', + 'not support' => '不支持', + 'redisd master' => 'Redisd 主服务器错误', + 'redisd slave' => 'Redisd 从服务器错误', + 'must run at sae' => '必须在SAE运行', + 'memcache init error' => '未开通Memcache服务,请在SAE管理平台初始化Memcache服务', + 'KVDB init error' => '没有初始化KVDB,请在SAE管理平台初始化KVDB服务', + 'fields not exists' => '数据表字段不存在', + 'where express error' => '查询表达式错误', + 'no data to update' => '没有任何数据需要更新', + 'miss data to insert' => '缺少需要写入的数据', + 'miss complex primary data' => '缺少复合主键数据', + 'miss update condition' => '缺少更新条件', + 'model data Not Found' => '模型数据不存在', + 'table data not Found' => '表数据不存在', + 'delete without condition' => '没有条件不会执行删除操作', + 'miss relation data' => '缺少关联表数据', + 'tag attr must' => '模板标签属性必须', + 'tag error' => '模板标签错误', + 'cache write error' => '缓存写入失败', + 'sae mc write error' => 'SAE mc 写入错误', + 'route name not exists' => '路由标识不存在(或参数不够)', + 'invalid request' => '非法请求', + 'bind attr has exists' => '模型的属性已经存在', + 'relation data not exists' => '关联数据不存在', + 'relation not support' => '关联不支持', + 'chunk not support order' => 'Chunk不支持调用order方法', + + // 上传错误信息 + 'unknown upload error' => '未知上传错误!', + 'file write error' => '文件写入失败!', + 'upload temp dir not found' => '找不到临时文件夹!', + 'no file to uploaded' => '没有文件被上传!', + 'only the portion of file is uploaded' => '文件只有部分被上传!', + 'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!', + 'upload write error' => '文件上传保存错误!', + 'has the same filename: {:filename}' => '存在同名文件:{:filename}', + 'upload illegal files' => '非法上传文件', + 'illegal image files' => '非法图片文件', + 'extensions to upload is not allowed' => '上传文件后缀不允许', + 'mimetype to upload is not allowed' => '上传文件MIME类型不允许!', + 'filesize not match' => '上传文件大小不符!', + 'directory {:path} creation failed' => '目录 {:path} 创建失败!', + + // Validate Error Message + ':attribute require' => ':attribute不能为空', + ':attribute must be numeric' => ':attribute必须是数字', + ':attribute must be integer' => ':attribute必须是整数', + ':attribute must be float' => ':attribute必须是浮点数', + ':attribute must be bool' => ':attribute必须是布尔值', + ':attribute not a valid email address' => ':attribute格式不符', + ':attribute not a valid mobile' => ':attribute格式不符', + ':attribute must be a array' => ':attribute必须是数组', + ':attribute must be yes,on or 1' => ':attribute必须是yes、on或者1', + ':attribute not a valid datetime' => ':attribute不是一个有效的日期或时间格式', + ':attribute not a valid file' => ':attribute不是有效的上传文件', + ':attribute not a valid image' => ':attribute不是有效的图像文件', + ':attribute must be alpha' => ':attribute只能是字母', + ':attribute must be alpha-numeric' => ':attribute只能是字母和数字', + ':attribute must be alpha-numeric, dash, underscore' => ':attribute只能是字母、数字和下划线_及破折号-', + ':attribute not a valid domain or ip' => ':attribute不是有效的域名或者IP', + ':attribute must be chinese' => ':attribute只能是汉字', + ':attribute must be chinese or alpha' => ':attribute只能是汉字、字母', + ':attribute must be chinese,alpha-numeric' => ':attribute只能是汉字、字母和数字', + ':attribute must be chinese,alpha-numeric,underscore, dash' => ':attribute只能是汉字、字母、数字和下划线_及破折号-', + ':attribute not a valid url' => ':attribute不是有效的URL地址', + ':attribute not a valid ip' => ':attribute不是有效的IP地址', + ':attribute must be dateFormat of :rule' => ':attribute必须使用日期格式 :rule', + ':attribute must be in :rule' => ':attribute必须在 :rule 范围内', + ':attribute be notin :rule' => ':attribute不能在 :rule 范围内', + ':attribute must between :1 - :2' => ':attribute只能在 :1 - :2 之间', + ':attribute not between :1 - :2' => ':attribute不能在 :1 - :2 之间', + 'size of :attribute must be :rule' => ':attribute长度不符合要求 :rule', + 'max size of :attribute must be :rule' => ':attribute长度不能超过 :rule', + 'min size of :attribute must be :rule' => ':attribute长度不能小于 :rule', + ':attribute cannot be less than :rule' => ':attribute日期不能小于 :rule', + ':attribute cannot exceed :rule' => ':attribute日期不能超过 :rule', + ':attribute not within :rule' => '不在有效期内 :rule', + 'access IP is not allowed' => '不允许的IP访问', + 'access IP denied' => '禁止的IP访问', + ':attribute out of accord with :2' => ':attribute和确认字段:2不一致', + ':attribute cannot be same with :2' => ':attribute和比较字段:2不能相同', + ':attribute must greater than or equal :rule' => ':attribute必须大于等于 :rule', + ':attribute must greater than :rule' => ':attribute必须大于 :rule', + ':attribute must less than or equal :rule' => ':attribute必须小于等于 :rule', + ':attribute must less than :rule' => ':attribute必须小于 :rule', + ':attribute must equal :rule' => ':attribute必须等于 :rule', + ':attribute has exists' => ':attribute已存在', + ':attribute not conform to the rules' => ':attribute不符合指定规则', + 'invalid Request method' => '无效的请求类型', + 'invalid token' => '令牌数据无效', + 'not conform to the rules' => '规则错误', + 'in_top_sumday' => '该桌子处于最新的日结天数,请明天再进行日结', + 'exceeds_limit' => '下注超出限紅', + 'exceeds_limit_table' => '下注超出桌子限紅', + 'exceeds_limit_user' => '下注超出个人限紅', + 'under_limit_user' => '下注低于个人限紅', + 'end_bet_error' => '停止成功', + 'end_bet_error_1' => '当前局状态不在下注状态,不能停止', + 'end_bet_error_2' => '停止下注失败', + 'repeated_entry' => '你的账号在其他地方登陆了,即将退出', + + 'online_entrance' => '电投登录入口', + 'onlinechip_entrance' => '网投登录入口', + 'agent_entrance' => '代理端登录入口', + 'login_entrance' => '登录入口', + 'change_boot_false' => '当前有下注,不能结算,请开结果后再进行结算', + 'win_limit_tip' => '已达到日赢上限,无法下注', + + 'toning_result_0' => '0红4白', + 'toning_result_1' => '1红3白', + 'toning_result_2' => '2红2白', + 'toning_result_3' => '3红1白', + 'toning_result_4' => '4红0白', + 'toning_zero' => '0区下注额', + 'toning_four' => '4区下注额', + 'toning_one' => '1区下注额', + 'toning_three' => '3区下注额', + 'toning_big' => '大区下注额', + 'toning_small' => '小区下注额', + 'toning_singular' => '单区下注额', + 'toning_plural' => '双区下注额', + 'dice_small' => '大小-小下注额', + 'dice_big' => '大小-大下注额', + 'dice_singular' => '单双-单下注额', + 'dice_plural' => '单双-双区下注额', + 'dice_two_11' => '双骰-1下注额', + 'dice_two_22' => '双骰-2下注额', + 'dice_two_33' => '双骰-3下注额', + 'dice_two_44' => '双骰-4下注额', + 'dice_two_55' => '双骰-5下注额', + 'dice_two_66' => '双骰-6下注额', + 'dice_leopard' => '全围下注额', + 'dice_three_111' => '围骰-1下注额', + 'dice_three_222' => '围骰-2下注额', + 'dice_three_333' => '围骰-3下注额', + 'dice_three_444' => '围骰-4下注额', + 'dice_three_555' => '围骰-5下注额', + 'dice_three_666' => '围骰-6下注额', + 'dice_number_4' => '总和-4下注额', + 'dice_number_5' => '总和-5下注额', + 'dice_number_6' => '总和-6下注额', + 'dice_number_7' => '总和-7下注额', + 'dice_number_8' => '总和-8下注额', + 'dice_number_9' => '总和-9下注额', + 'dice_number_10' => '总和-10下注额', + 'dice_number_11' => '总和-11下注额', + 'dice_number_12' => '总和-12下注额', + 'dice_number_13' => '总和-13下注额', + 'dice_number_14' => '总和-14下注额', + 'dice_number_15' => '总和-15下注额', + 'dice_number_16' => '总和-16下注额', + 'dice_number_17' => '总和-17下注额', + 'dice_two_12' => '组合-1+2下注额', + 'dice_two_13' => '组合-1+3下注额', + 'dice_two_14' => '组合-1+4下注额', + 'dice_two_15' => '组合-1+5下注额', + 'dice_two_16' => '组合-1+6下注额', + 'dice_two_23' => '组合-2+3下注额', + 'dice_two_24' => '组合-2+4下注额', + 'dice_two_25' => '组合-2+5下注额', + 'dice_two_26' => '组合-2+6下注额', + 'dice_two_34' => '组合-3+4下注额', + 'dice_two_35' => '组合-3+5下注额', + 'dice_two_36' => '组合-3+6下注额', + 'dice_two_45' => '组合-4+5下注额', + 'dice_two_46' => '组合-4+6下注额', + 'dice_two_56' => '组合-5+6下注额', + 'dice_living_1' => '点数-1下注额', + 'dice_living_2' => '点数-2下注额', + 'dice_living_3' => '点数-3下注额', + 'dice_living_4' => '点数-4下注额', + 'dice_living_5' => '点数-5下注额', + 'dice_living_6' => '点数-6下注额', + 'european' => '欧式', + 'french' => '法式', + 'roulette_straight' => '直注', + 'roulette_split' => '分注', + 'roulette_street' => '街注', + 'roulette_triple' => '三数', + 'roulette_corner' => '角注', + 'roulette_four' => '角注', + 'roulette_line' => '线注', + 'roulette_dozen' => '打注', + 'roulette_column' => '列注', + 'roulette_red' => '红', + 'roulette_black' => '黑', + 'roulette_odd' => '单', + 'roulette_even' => '双', + 'roulette_low' => '小', + 'roulette_high' => '大', + 'roulette_column_1' => '第一列', + 'roulette_column_2' => '第二列', + 'roulette_column_3' => '第三列', + 'roulette_dozen_1' => '第一打', + 'roulette_dozen_2' => '第二打', + 'roulette_dozen_3' => '第三打', + 'roulette_zeroGame' => '轮上零旁', + 'roulette_neighborsOfZero' => '零旁注上角', + 'roulette_orphans' => '轮上孤注', + 'roulette_theThird' => '轮盘下角注', + +]; diff --git a/app/handle/view/index/tab_b.html b/app/handle/view/index/tab_b.html index 31604cb..a502aa7 100644 --- a/app/handle/view/index/tab_b.html +++ b/app/handle/view/index/tab_b.html @@ -117,31 +117,36 @@ -
-
-
- {:lang('banker')}\{:lang('player')} +
+
+
+
+ {:lang('banker')}\{:lang('player')} +
+
+   +
-
-   +
+
+ {:lang('tie')} +
+
+   +
+
+
+
+ {:lang('pair')} +
+
+   +
-
-
- {:lang('tie')} -
-
-   -
-
-
-
- {:lang('pair')} -
-
-   -
- +
+
+
@@ -196,6 +201,8 @@ + +
@@ -247,18 +254,22 @@ {:lang('select_result')}:
+
+
+
+
@@ -201,6 +205,7 @@ + diff --git a/app/handle/view/index/tab_b_sb.html b/app/handle/view/index/tab_b_sb.html index bcdd41d..fe1dfe9 100644 --- a/app/handle/view/index/tab_b_sb.html +++ b/app/handle/view/index/tab_b_sb.html @@ -490,6 +490,7 @@ + diff --git a/app/handle/view/index/tab_dice.html b/app/handle/view/index/tab_dice.html index 9f3daa6..8f9f805 100644 --- a/app/handle/view/index/tab_dice.html +++ b/app/handle/view/index/tab_dice.html @@ -124,6 +124,7 @@ + diff --git a/app/handle/view/index/tab_dt.html b/app/handle/view/index/tab_dt.html index 628b5a5..997ba59 100644 --- a/app/handle/view/index/tab_dt.html +++ b/app/handle/view/index/tab_dt.html @@ -105,22 +105,28 @@ -
-
-
- {:lang('dragon')}\{:lang('tiger')} +
+
+
+
+ {:lang('dragon')}\{:lang('tiger')} +
+
+   +
-
-   +
+
+ {:lang('tie')} +
+
+   +
-
-
- {:lang('tie')} -
-
-   -
+
+
+
@@ -227,6 +233,7 @@ - + + \ No newline at end of file diff --git a/app/handle/view/index/tab_dt_auto.html b/app/handle/view/index/tab_dt_auto.html index bef38b9..4bfb158 100644 --- a/app/handle/view/index/tab_dt_auto.html +++ b/app/handle/view/index/tab_dt_auto.html @@ -59,6 +59,10 @@
+
+
+
+
@@ -170,6 +174,7 @@ + diff --git a/app/handle/view/index/tab_dt_sb.html b/app/handle/view/index/tab_dt_sb.html index 1208ceb..586034b 100644 --- a/app/handle/view/index/tab_dt_sb.html +++ b/app/handle/view/index/tab_dt_sb.html @@ -459,6 +459,7 @@ + diff --git a/app/handle/view/index/tab_knn.html b/app/handle/view/index/tab_knn.html index f922341..faed50a 100644 --- a/app/handle/view/index/tab_knn.html +++ b/app/handle/view/index/tab_knn.html @@ -156,6 +156,10 @@ +
+
+
+
@@ -341,6 +345,7 @@ + diff --git a/app/handle/view/index/tab_nn.html b/app/handle/view/index/tab_nn.html index b5dd279..3dee3d0 100644 --- a/app/handle/view/index/tab_nn.html +++ b/app/handle/view/index/tab_nn.html @@ -137,6 +137,10 @@ 0 +
+
+
+
@@ -616,6 +620,7 @@ + diff --git a/app/handle/view/index/tab_nn_sb.html b/app/handle/view/index/tab_nn_sb.html index c7f8bc6..f8aa232 100644 --- a/app/handle/view/index/tab_nn_sb.html +++ b/app/handle/view/index/tab_nn_sb.html @@ -620,6 +620,7 @@ + diff --git a/app/handle/view/index/tab_roulette.html b/app/handle/view/index/tab_roulette.html index 7de7b73..ac6a417 100644 --- a/app/handle/view/index/tab_roulette.html +++ b/app/handle/view/index/tab_roulette.html @@ -126,6 +126,7 @@ + diff --git a/app/handle/view/index/tab_toning.html b/app/handle/view/index/tab_toning.html index 333fa77..4ddb413 100644 --- a/app/handle/view/index/tab_toning.html +++ b/app/handle/view/index/tab_toning.html @@ -51,6 +51,10 @@ +
+
+
+
@@ -132,6 +136,7 @@ + diff --git a/app/index/controller/Log.php b/app/index/controller/Log.php new file mode 100644 index 0000000..a6147ec --- /dev/null +++ b/app/index/controller/Log.php @@ -0,0 +1,32 @@ +isPost()) return json(['status' => 0]); + $data = Request::instance()->post(); + if (empty($data)) { + $raw = Request::instance()->getContent(); + $data = json_decode($raw, true) ?: []; + } + \app\utils\Logger::error(\app\utils\Logger::CAT_FRONTEND, $data['message'] ?? 'unknown', [ + 'source' => $data['source'] ?? 'unknown', + 'type' => $data['type'] ?? 'error', + 'stack' => isset($data['stack']) ? substr($data['stack'], 0, 2000) : '', + 'file' => $data['file'] ?? '', + 'url' => $data['url'] ?? '', + 'line' => $data['line'] ?? '', + 'col' => $data['col'] ?? '', + 'ua' => Request::instance()->header('user-agent', ''), + 'ip' => Request::instance()->ip(), + ]); + return json(['status' => 1]); + } +} diff --git a/app/lang/zh-cn.php b/app/lang/zh-cn.php new file mode 100644 index 0000000..d592710 --- /dev/null +++ b/app/lang/zh-cn.php @@ -0,0 +1,600 @@ + +// +---------------------------------------------------------------------- + +// 核心中文语言包 +return [ + // 操作端 和 swoole文件 简体中文语言包 + 'lang' => 'zh-cn', + 'table' => '桌台', + 'boot' => '靴数', + 'number' => '局数', + 'now_time' => '当前时间', + 'login_fail' => '登录失败', + + 'banker' => '庄', + 'player' => '闲', + 'tie' => '和', + 'banker_pair' => '庄对', + 'player_pair' => '闲对', + 'both_pair' => '庄闲对', + 'pair' => '对子', + 'big' => '大', + 'small' => '小', + 'dragon' => '龙', + 'tiger' => '虎', + 'win_6' => '赢6', + 'is_win_6' => '是否赢6', + 'luck_6' => '幸运6', + 'commission' => '抽佣', + 'free_commission' => '免佣', + 'round_host' => '本局为庄家', + 'banker_full' => '庄', + 'player_full' => '闲', + 'tie_full' => '和', + 'banker_pair_full' => '庄对', + 'player_pair_full' => '闲对', + 'both_pair_full' => '庄闲对', + 'dragon_full' => '龙', + 'tiger_full' => '虎', + 'player_1' => '闲1', + 'player_2' => '闲2', + 'player_3' => '闲3', + 'player_1_flat' => '闲1平倍', + 'player_1_double' => '闲1翻倍', + 'banker_player_1_flat' => '庄(闲1)平倍', + 'banker_player_1_double' => '庄(闲1)翻倍', + 'player_2_flat' => '闲2平倍', + 'player_2_double' => '闲2翻倍', + 'banker_player_2_flat' => '庄(闲2)平倍', + 'banker_player_2_double' => '庄(闲2)翻倍', + 'player_3_flat' => '闲3平倍', + 'player_3_double' => '闲3翻倍', + 'banker_player_3_flat' => '庄(闲3)平倍', + 'banker_player_3_double' => '庄(闲3)翻倍', + 'bull_0' => '无牛', + 'bull_1' => '牛一', + 'bull_2' => '牛二', + 'bull_3' => '牛三', + 'bull_4' => '牛四', + 'bull_5' => '牛五', + 'bull_6' => '牛六', + 'bull_7' => '牛七', + 'bull_8' => '牛八', + 'bull_9' => '牛九', + 'bull_bull' => '牛牛', + '5_bulls' => '五公', + 'yes' => '是', + 'no' => '否', + 'online_number' => '在线人数', + 'bet_amount' => '本局下注金额', + 'wait_For_Opening' => '停止下注-等待开盘', + 'point' => '点', + 'void' => '已作废', + + 'next' => '下一局', + 'disclaimer' => '路牌资料仅供参考,如有错漏。本公司概不负责', + 'data_error' => '数据错误', + 'browser_error' => '您的浏览器不支持WebSocket', + + 'start' => '开始', + 'end' => '结束', + 'start_bet' => '接收下注', + 'end_bet' => '结束下注', + 'opening' => '提交结果', + 'shuffle' => '开始洗牌', + 'change_boot' => '换靴', + 'close_Boot' => '日结算', + 'logout' => '退出', + 'is_to_shuffle' => '是否需要将桌子的状态设置为"洗牌中"?', + 'is_to_balance' => '是否需要进行日结算?', + 'is_to_boot' => '是否需要进行换靴?', + 'need_a_result' => '请选择要修改的结果', + 'is_to_logout' => '是否退出登录?', + + 'edit_previous_result' => '修改上一局结果', + 'select_result' => '选择结果', + 'select' => '请选择', + 'monday' => '星期一', + 'tuesday' => '星期二', + 'wednesday' => '星期三', + 'thursday' => '星期四', + 'friday' => '星期五', + 'saturday' => '星期六', + 'sunday' => '星期日', + + 'user_not_exist' => '用户不存在', + 'table_not_run' => '该桌子暂时没有营运', + 'tableNotRun' => '该桌子暂时没有营运', + 'bet_fail' => '下注失败,服务器链接失败', + 'no_right' => '你无权操作', + + 'bet_status_1' => '接受下注', + 'bet_status_0' => '尚未接受下注', + 'bet_status_2' => '停止下注-等待开盘', + + 'confirm' => '确定', + 'cancel' => '取消', + 'connect_fail' => '您已断开链接,请返回重新进入', + 'message' => '信息', + + 'table_status_0' => '桌子运营中', + 'table_status_1' => '洗牌中', + 'table_status_2' => '停台中', + + 'link_server_fail' => '与服务通讯失败', + 'link_server_fail_1' => '荷官不在线', + 'link_server_fail_2' => '与服务通讯失败2', + 'link_server_fail_3' => '与服务通讯失败3', + + 'appid_error' => 'appid 错误', + 'appsecret_error' => 'appsecret 错误', + 'appid_or_appsecret_error' => 'appid或appsecret 错误', + 'param_error' => '参数错误', + 'illegal_request' => '非法请求', + + 'balance_success' => '日结算成功', + 'balance_fail' => '日结算失败', + 'balance_fail_1' => '日结算失败1', + 'balance_fail_2' => '日结算失败2', + 'table_status_error' => '请把桌子更改为"洗牌状态"再进行日结算', + + 'boot_settle_success' => '靴结算成功', + 'boot_settle_fail' => '靴结算失败', + 'boot_settle_fail_1' => '换靴失败,该桌子还没有靴,请进行日结', + 'boot_settle_fail_2' => '换靴失败,该桌子已经结算,请重新登录再继续', + 'boot_settle_fail_3' => '该铺尚未结束,请开出结果后再换靴', + + 'start_bet_success' => '开始下注成功', + 'start_bet_fail' => '开始下注失败', + 'start_bet_fail_1' => '开始下注失败,下注铺已经开始下注或者已经停止了下注', + 'start_bet_fail_2' => '开始下注失败,下注铺信息有误', + 'start_bet_fail_3' => '操作失败,请确保桌子不是在洗牌中或者停台中状态', + + 'end_bet_success' => '结束下注成功', + 'end_bet_fail' => '结束下注失败', + 'end_bet_fail_1' => '停止下注失败,该铺还没开始接受下注或者已经停止了下注', + 'end_bet_fail_2' => '开始下注失败,下注铺信息有误', + + 'to_bet_success' => '下注成功', + 'to_bet_fail' => '下注失败', + 'to_bet_fail_1' => '余额不足,不能下注', + 'to_bet_fail_2' => '会员信息错误,不能下注', + 'to_bet_fail_3' => '已超过允许的下注时间,不能下注', + 'to_bet_fail_4' => '该局不是在可以下注的状态,不能下注', + 'to_bet_fail_5' => '下注失败,下注铺信息有误', + 'to_bet_fail_6' => '下注金额必须大于0', + 'to_bet_fail_7' => '超过50局后无法下注幸运6', + 'to_bet_fail_8' => '超过30局后无法下注大小', + + 'opening_success' => '开盘结果成功', + 'opening_fail' => '开盘结果失败', + 'opening_fail_1' => '开结果失败,请确认该局是处于停止下注的状态', + 'opening_fail_2' => '开盘失败,开盘铺信息有误', + 'opening_fail_3' => '请输入开盘结果', + 'opening_fail_4' => '下注未结束,无法开结果', + 'opening_fail_5' => '开盘失败,庄闲牌面不齐', + 'opening_fail_6' => '开牌数据不存在', + + 'retreated_success' => '修改成功', + 'retreated_fail' => '修改失败', + 'retreated_fail_1' => '请正确选择结果', + 'retreated_fail_2' => '没有上一铺数据可更改', + 'retreated_fail_3' => '靴信息错误', + 'retreated_fail_4' => '回合信息错误', + 'retreated_fail_5' => '桌子信息错误', + 'retreated_fail_6' => '游戏类型错误', + + + // PC投注页面 简体中文语言包 + 'welcome' => '欢迎您', + 'account' => '账号', + 'money' => '余额', + 'language' => '语言', + 'rule' => '规则', + 'record' => '记录', + 'user' => '个人中心', + 'log_out' => '退出游戏', + 'limit' => '限红', + + 'game' => '游戏', + 'baccarat' => '百家乐', + 'dt' => '龙虎', + 'color_plate' => '色碟', + 'sic_bo' => '骰宝', + 'roulette' => '轮盘', + 'start_date' => '开始日期', + 'end_date' => '结束日期', + 'search' => '查询', + 'ttf' => '桌台/时间/局号', + 'total' => '合计', + 'card' => '牌', + 'banker_all' => '庄', + 'player_all' => '闲', + 'tie_all' => '和', + 'banker_pair_all' => '庄对', + 'player_pair_all' => '闲对', + 'both_pair_all' => '庄闲对', + 'banker_doub_all' => '庄翻倍', + 'player_doub_all' => '闲翻倍', + 'dragon_all' => '龙', + 'tiger_all' => '虎', + + + 'full_screen' => '全屏', + 'exit_full_screen' => '退出全屏', + 'back' => '返回', + 'sound' => '声音', + 'statistics' => '统计', + 'b_query' => '庄问路', + 'p_query' => '闲问路', + 'd_query' => '龙问路', + 't_query' => '虎问路', + 'line' => '线路', + 'line_1' => '近景', + 'line_2' => '远景', + 'line_3' => '线路三', + 'lobby' => '大厅', + + 'video_line_error' => '视频线路错误', + 'lose' => '输', + 'win' => '赢', + 'to_bet_confirm_tip' => '请下注后再点击确定', + 'browser_tip' => '请使用谷歌、360、QQ、百度、火狐、或者IE10以上版本的高级浏览器进入游戏', + 'select_chip_tip' => '请选择下注筹码', + 'recharge_tip' => '余额不足,请充值', + 'instant_pot' => '即时彩池', + 'bet' => '下注', + 'settlement' => '结算结果', + 'no_bet_data' => '没有下注数据', + 'personal_limit_banker_high' => '个人限红:庄最高下注额为', + 'personal_limit_banker_low' => '个人限红:庄最低下注额为', + 'personal_limit_player_high' => '个人限红:闲最高下注额为', + 'personal_limit_player_low' => '个人限红:闲最低下注额为', + 'personal_limit_tie_high' => '个人限红:和最高下注额为', + 'personal_limit_tie_low' => '个人限红:和最低下注额为', + 'personal_limit_banker_pair_high' => '个人限红:庄对最高下注额为', + 'personal_limit_banker_pair_low' => '个人限红:庄对最低下注额为', + 'personal_limit_player_pair_high' => '个人限红:闲对最高下注额为', + 'personal_limit_player_pair_low' => '个人限红:闲对最低下注额为', + 'personal_limit_dragon_high' => '个人限红:龙最高下注额为', + 'personal_limit_dragon_low' => '个人限红:龙最低下注额为', + 'personal_limit_tiger_high' => '个人限红:虎最高下注额为', + 'personal_limit_tiger_low' => '个人限红:虎最低下注额为', + 'game_not_start' => '游戏尚未开始', + 'game_stop_bet' => '本局游戏已停止下注', + 'leave_table_tip' => '确定要离开当前游戏台吗?', + 'select_chip_tip' => '请选择下注筹码', + + + // wap电投和网投语言包 + 'coming_soon' => '即将推出', + 'game_room' => '游戏大厅', + + 'edit_pass' => '修改密码', + 'change_password' => '修改密码', + 'phone' => '联系电话', + 'last_login_time' => '上次登陆时间', + 'recharge' => '充值上分', + 'withdraw' => '申请下分', + 'bill' => '账单', + 'game_record' => '游戏记录', + 'baccarat_total_bet_count' => '百家乐总下注次数', + 'dt_total_bet_count' => '龙虎总下注次数', + 'total_cleared_wash_code' => '已结算洗码总额', + 'uncleared_total_wash_code' => '未结算洗码总额', + 'wash_rate' => '洗码率', + + 'current_password' => '请输入旧密码', + 'new_password' => '请输入新密码', + 'confirm_password' => '再次输入新密码', + 'current_password_tip' => '请输入旧密码', + 'new_password_tip' => '新密码不能小于6个字符', + 'confirm_password_tip' => '两次输入的密码不一致', + 'login_again' => '请重新登录', + 'login' => '登录', + 'sign_in' => '登录', + 'account_login' => '已有账户登录', + 'register' => '注册', + 'register_new_user' => '新用户注册', + 'password' => '密码', + 'register_password_length_tip' => '密码不能小于6个字符', + 'register_account_length_tip' => '账号不能小于6个字符', + 'register_account_exist_tip' => '账号已存在', + 'register_account_tip' => '6-20位英文.数字组成', + 'register_password_tip' => '6-20位字符.不包含空格', + 'register_confirm_password_tip' => '再输入一遍登录密码', + 'register_success' => '注册成功', + 'register_fail' => '注册失败', + + 'password_not_empty' => '旧密码或新密码不能为空', + 'change_password_success' => '修改密码成功', + 'change_password_fail' => '修改密码失败', + 'current_password_error' => '旧密码错误', + 'recharge_unsupport_tip' => '上分暂时未开启,请联系您的代理上分', + 'withdraw_unsupport_tip' => '下分暂时未开启,请联系您的代理下分', + 'select_time' => '选择时间', + 'start_time_tip' => '请选择开始时间', + 'end_time_tip' => '请选择结束时间', + + 'wash_code_amount' => '洗码量', + 'code_amount' => '码量', + 'net_code_amount' => '净码量', + 'wash_code_time' => '洗码时间', + 'extraction_method' => '提取方式', + 'deposit_money' => '存入余额', + 'setup' => '设置', + 'mute' => '静音', + 'voice' => '开声', + 'win_or_lose' => '输赢', + 'account_tip' => '请输入账号', + 'password_tip' => '请输入密码', + 'read_and_agree' => '我已阅读并同意', + 'rule_and_agreement' => '游戏规则与用户协议', + 'account_or_password_error' => '账号或密码错误', + 'account_not_exist' => '账号不存在', + 'force_offline' => '你已被管理员强制下线', + 'auto_back' => '5局内未下注自动返回游戏大厅', + + 'reset_number' => '作废', + 'is_reset_number' => '是否作废当前该局?', + 'reset_number_success' => '操作成功', + 'reset_number_fail_1' => '操作失败,该靴已经结算', + 'reset_number_fail_2' => '操作失败,该桌子已经结算', + 'reset_number_fail_3' => '操作失败,下注状态不符', + 'reset_number_msg' => '该局已重置,请重新下注', + + + + + + + + + + + + + + + + + + // 系统错误提示 + 'Undefined variable' => '未定义变量', + 'Undefined index' => '未定义数组索引', + 'Undefined offset' => '未定义数组下标', + 'Parse error' => '语法解析错误', + 'Type error' => '类型错误', + 'Fatal error' => '致命错误', + 'syntax error' => '语法错误', + + // 框架核心错误提示 + 'dispatch type not support' => '不支持的调度类型', + 'method param miss' => '方法参数错误', + 'method not exists' => '方法不存在', + 'module not exists' => '模块不存在', + 'controller not exists' => '控制器不存在', + 'class not exists' => '类不存在', + 'property not exists' => '类的属性不存在', + 'template not exists' => '模板文件不存在', + 'illegal controller name' => '非法的控制器名称', + 'illegal action name' => '非法的操作名称', + 'url suffix deny' => '禁止的URL后缀访问', + 'Route Not Found' => '当前访问路由未定义', + 'Undefined db type' => '未定义数据库类型', + 'variable type error' => '变量类型错误', + 'PSR-4 error' => 'PSR-4 规范错误', + 'not support total' => '简洁模式下不能获取数据总数', + 'not support last' => '简洁模式下不能获取最后一页', + 'error session handler' => '错误的SESSION处理器类', + 'not allow php tag' => '模板不允许使用PHP语法', + 'not support' => '不支持', + 'redisd master' => 'Redisd 主服务器错误', + 'redisd slave' => 'Redisd 从服务器错误', + 'must run at sae' => '必须在SAE运行', + 'memcache init error' => '未开通Memcache服务,请在SAE管理平台初始化Memcache服务', + 'KVDB init error' => '没有初始化KVDB,请在SAE管理平台初始化KVDB服务', + 'fields not exists' => '数据表字段不存在', + 'where express error' => '查询表达式错误', + 'no data to update' => '没有任何数据需要更新', + 'miss data to insert' => '缺少需要写入的数据', + 'miss complex primary data' => '缺少复合主键数据', + 'miss update condition' => '缺少更新条件', + 'model data Not Found' => '模型数据不存在', + 'table data not Found' => '表数据不存在', + 'delete without condition' => '没有条件不会执行删除操作', + 'miss relation data' => '缺少关联表数据', + 'tag attr must' => '模板标签属性必须', + 'tag error' => '模板标签错误', + 'cache write error' => '缓存写入失败', + 'sae mc write error' => 'SAE mc 写入错误', + 'route name not exists' => '路由标识不存在(或参数不够)', + 'invalid request' => '非法请求', + 'bind attr has exists' => '模型的属性已经存在', + 'relation data not exists' => '关联数据不存在', + 'relation not support' => '关联不支持', + 'chunk not support order' => 'Chunk不支持调用order方法', + + // 上传错误信息 + 'unknown upload error' => '未知上传错误!', + 'file write error' => '文件写入失败!', + 'upload temp dir not found' => '找不到临时文件夹!', + 'no file to uploaded' => '没有文件被上传!', + 'only the portion of file is uploaded' => '文件只有部分被上传!', + 'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!', + 'upload write error' => '文件上传保存错误!', + 'has the same filename: {:filename}' => '存在同名文件:{:filename}', + 'upload illegal files' => '非法上传文件', + 'illegal image files' => '非法图片文件', + 'extensions to upload is not allowed' => '上传文件后缀不允许', + 'mimetype to upload is not allowed' => '上传文件MIME类型不允许!', + 'filesize not match' => '上传文件大小不符!', + 'directory {:path} creation failed' => '目录 {:path} 创建失败!', + + // Validate Error Message + ':attribute require' => ':attribute不能为空', + ':attribute must be numeric' => ':attribute必须是数字', + ':attribute must be integer' => ':attribute必须是整数', + ':attribute must be float' => ':attribute必须是浮点数', + ':attribute must be bool' => ':attribute必须是布尔值', + ':attribute not a valid email address' => ':attribute格式不符', + ':attribute not a valid mobile' => ':attribute格式不符', + ':attribute must be a array' => ':attribute必须是数组', + ':attribute must be yes,on or 1' => ':attribute必须是yes、on或者1', + ':attribute not a valid datetime' => ':attribute不是一个有效的日期或时间格式', + ':attribute not a valid file' => ':attribute不是有效的上传文件', + ':attribute not a valid image' => ':attribute不是有效的图像文件', + ':attribute must be alpha' => ':attribute只能是字母', + ':attribute must be alpha-numeric' => ':attribute只能是字母和数字', + ':attribute must be alpha-numeric, dash, underscore' => ':attribute只能是字母、数字和下划线_及破折号-', + ':attribute not a valid domain or ip' => ':attribute不是有效的域名或者IP', + ':attribute must be chinese' => ':attribute只能是汉字', + ':attribute must be chinese or alpha' => ':attribute只能是汉字、字母', + ':attribute must be chinese,alpha-numeric' => ':attribute只能是汉字、字母和数字', + ':attribute must be chinese,alpha-numeric,underscore, dash' => ':attribute只能是汉字、字母、数字和下划线_及破折号-', + ':attribute not a valid url' => ':attribute不是有效的URL地址', + ':attribute not a valid ip' => ':attribute不是有效的IP地址', + ':attribute must be dateFormat of :rule' => ':attribute必须使用日期格式 :rule', + ':attribute must be in :rule' => ':attribute必须在 :rule 范围内', + ':attribute be notin :rule' => ':attribute不能在 :rule 范围内', + ':attribute must between :1 - :2' => ':attribute只能在 :1 - :2 之间', + ':attribute not between :1 - :2' => ':attribute不能在 :1 - :2 之间', + 'size of :attribute must be :rule' => ':attribute长度不符合要求 :rule', + 'max size of :attribute must be :rule' => ':attribute长度不能超过 :rule', + 'min size of :attribute must be :rule' => ':attribute长度不能小于 :rule', + ':attribute cannot be less than :rule' => ':attribute日期不能小于 :rule', + ':attribute cannot exceed :rule' => ':attribute日期不能超过 :rule', + ':attribute not within :rule' => '不在有效期内 :rule', + 'access IP is not allowed' => '不允许的IP访问', + 'access IP denied' => '禁止的IP访问', + ':attribute out of accord with :2' => ':attribute和确认字段:2不一致', + ':attribute cannot be same with :2' => ':attribute和比较字段:2不能相同', + ':attribute must greater than or equal :rule' => ':attribute必须大于等于 :rule', + ':attribute must greater than :rule' => ':attribute必须大于 :rule', + ':attribute must less than or equal :rule' => ':attribute必须小于等于 :rule', + ':attribute must less than :rule' => ':attribute必须小于 :rule', + ':attribute must equal :rule' => ':attribute必须等于 :rule', + ':attribute has exists' => ':attribute已存在', + ':attribute not conform to the rules' => ':attribute不符合指定规则', + 'invalid Request method' => '无效的请求类型', + 'invalid token' => '令牌数据无效', + 'not conform to the rules' => '规则错误', + 'in_top_sumday' => '该桌子处于最新的日结天数,请明天再进行日结', + 'exceeds_limit' => '下注超出限紅', + 'exceeds_limit_table' => '下注超出桌子限紅', + 'exceeds_limit_user' => '下注超出个人限紅', + 'under_limit_user' => '下注低于个人限紅', + 'end_bet_error' => '已停止下注', + 'end_bet_error_1' => '当前局状态不在下注状态,不能停止', + 'end_bet_error_2' => '停止下注失败', + 'repeated_entry' => '你的账号在其他地方登陆了,即将退出', + + 'online_entrance' => '电投登录入口', + 'onlinechip_entrance' => '网投登录入口', + 'agent_entrance' => '代理端登录入口', + 'login_entrance' => '登录入口', + 'change_boot_false' => '当前有下注,不能结算,请开结果后再进行结算', + 'win_limit_tip' => '已达到日赢上限,无法下注', + + 'toning_result_0' => '0红4白', + 'toning_result_1' => '1红3白', + 'toning_result_2' => '2红2白', + 'toning_result_3' => '3红1白', + 'toning_result_4' => '4红0白', + 'toning_zero' => '0区下注额', + 'toning_four' => '4区下注额', + 'toning_one' => '1区下注额', + 'toning_three' => '3区下注额', + 'toning_big' => '大区下注额', + 'toning_small' => '小区下注额', + 'toning_singular' => '单区下注额', + 'toning_plural' => '双区下注额', + 'dice_small' => '大小-小下注额', + 'dice_big' => '大小-大下注额', + 'dice_singular' => '单双-单下注额', + 'dice_plural' => '单双-双区下注额', + 'dice_two_11' => '双骰-1下注额', + 'dice_two_22' => '双骰-2下注额', + 'dice_two_33' => '双骰-3下注额', + 'dice_two_44' => '双骰-4下注额', + 'dice_two_55' => '双骰-5下注额', + 'dice_two_66' => '双骰-6下注额', + 'dice_leopard' => '全围下注额', + 'dice_three_111' => '围骰-1下注额', + 'dice_three_222' => '围骰-2下注额', + 'dice_three_333' => '围骰-3下注额', + 'dice_three_444' => '围骰-4下注额', + 'dice_three_555' => '围骰-5下注额', + 'dice_three_666' => '围骰-6下注额', + 'dice_number_4' => '总和-4下注额', + 'dice_number_5' => '总和-5下注额', + 'dice_number_6' => '总和-6下注额', + 'dice_number_7' => '总和-7下注额', + 'dice_number_8' => '总和-8下注额', + 'dice_number_9' => '总和-9下注额', + 'dice_number_10' => '总和-10下注额', + 'dice_number_11' => '总和-11下注额', + 'dice_number_12' => '总和-12下注额', + 'dice_number_13' => '总和-13下注额', + 'dice_number_14' => '总和-14下注额', + 'dice_number_15' => '总和-15下注额', + 'dice_number_16' => '总和-16下注额', + 'dice_number_17' => '总和-17下注额', + 'dice_two_12' => '组合-1+2下注额', + 'dice_two_13' => '组合-1+3下注额', + 'dice_two_14' => '组合-1+4下注额', + 'dice_two_15' => '组合-1+5下注额', + 'dice_two_16' => '组合-1+6下注额', + 'dice_two_23' => '组合-2+3下注额', + 'dice_two_24' => '组合-2+4下注额', + 'dice_two_25' => '组合-2+5下注额', + 'dice_two_26' => '组合-2+6下注额', + 'dice_two_34' => '组合-3+4下注额', + 'dice_two_35' => '组合-3+5下注额', + 'dice_two_36' => '组合-3+6下注额', + 'dice_two_45' => '组合-4+5下注额', + 'dice_two_46' => '组合-4+6下注额', + 'dice_two_56' => '组合-5+6下注额', + 'dice_living_1' => '点数-1下注额', + 'dice_living_2' => '点数-2下注额', + 'dice_living_3' => '点数-3下注额', + 'dice_living_4' => '点数-4下注额', + 'dice_living_5' => '点数-5下注额', + 'dice_living_6' => '点数-6下注额', + 'european' => '欧式', + 'french' => '法式', + 'roulette_straight' => '直注', + 'roulette_split' => '分注', + 'roulette_street' => '街注', + 'roulette_triple' => '三数', + 'roulette_corner' => '角注', + 'roulette_four' => '角注', + 'roulette_line' => '线注', + 'roulette_dozen' => '打注', + 'roulette_column' => '列注', + 'roulette_red' => '红', + 'roulette_black' => '黑', + 'roulette_odd' => '单', + 'roulette_even' => '双', + 'roulette_low' => '小', + 'roulette_high' => '大', + 'roulette_column_1' => '第一列', + 'roulette_column_2' => '第二列', + 'roulette_column_3' => '第三列', + 'roulette_dozen_1' => '第一打', + 'roulette_dozen_2' => '第二打', + 'roulette_dozen_3' => '第三打', + 'roulette_zeroGame' => '轮上零旁', + 'roulette_neighborsOfZero' => '零旁注上角', + 'roulette_orphans' => '轮上孤注', + 'roulette_theThird' => '轮盘下角注', + +]; diff --git a/app/listener/.DS_Store b/app/listener/.DS_Store deleted file mode 100644 index b533d60..0000000 Binary files a/app/listener/.DS_Store and /dev/null differ diff --git a/app/listener/WsClose.php b/app/listener/WsClose.php index df948a1..c3e826e 100644 --- a/app/listener/WsClose.php +++ b/app/listener/WsClose.php @@ -3,6 +3,7 @@ declare (strict_types = 1); namespace app\listener; +use app\utils\Logger; use freedom\utils\SocketSession; use think\swoole\WebSocket; @@ -55,6 +56,6 @@ class WsClose } $tableFd->del((string) $fd); $ws->leave(SocketSession::HOUSE_NAME); - echo $fd.":退出\n"; + Logger::info(Logger::CAT_CONNECT, 'ws_close', ['fd' => $fd, 'mode' => $mode, 'table_id' => $fdInfo['table_id'] ?? '']); } } diff --git a/app/listener/WsConnect.php b/app/listener/WsConnect.php index 0a99c19..173e292 100644 --- a/app/listener/WsConnect.php +++ b/app/listener/WsConnect.php @@ -7,6 +7,7 @@ use app\services\connect\ScanConnectService; use app\services\connect\SpaceConnectService; use app\services\connect\UserConnectService; use app\services\connect\ManagerConnectService; +use app\utils\Logger; use think\Request; class WsConnect @@ -18,6 +19,11 @@ class WsConnect */ public function handle(Request $event){ $connect = $event->get('connect'); + Logger::info(Logger::CAT_CONNECT, 'ws_connect', [ + 'mode' => $connect, + 'table_id' => $event->get('table_id'), + 'account' => $event->get('account'), + ]); switch ($connect) { case 'space': SpaceConnectService::doSpaceConnect($event); diff --git a/app/listener/space/ChangeBoot.php b/app/listener/space/ChangeBoot.php index cddd1b8..40c269e 100644 --- a/app/listener/space/ChangeBoot.php +++ b/app/listener/space/ChangeBoot.php @@ -4,6 +4,7 @@ declare (strict_types = 1); namespace app\listener\space; use app\models\process\Boot; +use app\utils\Logger; use freedom\utils\SocketSession; use think\swoole\WebSocket; @@ -22,7 +23,9 @@ class ChangeBoot $modelRes = Boot::changeBoot($tableInfo); if ($modelRes['status'] == true){ $ws->to(SocketSession::HOUSE_NAME)->emit('changeBoot',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $modelRes['data']]); + Logger::info(Logger::CAT_GAME, 'change_boot', ['table_id' => $tableInfo['id'], 'table_name' => $tableInfo['table_name']]); }else{ + Logger::warn(Logger::CAT_GAME, 'change_boot_fail', ['table_id' => $tableInfo['id'], 'msg' => $modelRes['msg']]); $ws->emit('changeBoot', ['status' => false, 'msg' => $modelRes['msg']]); } }else{ diff --git a/app/listener/space/ResetBoot.php b/app/listener/space/ResetBoot.php index 8855f28..520bdf0 100644 --- a/app/listener/space/ResetBoot.php +++ b/app/listener/space/ResetBoot.php @@ -4,6 +4,7 @@ declare (strict_types = 1); namespace app\listener\space; use app\models\process\Sumday; +use app\utils\Logger; use freedom\utils\SocketSession; use think\swoole\Websocket; @@ -22,11 +23,14 @@ class ResetBoot $modelRes = Sumday::resetBoot($tableInfo); if ($modelRes['status'] == true){ $ws->to(SocketSession::HOUSE_NAME)->emit('resetBoot',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $modelRes['data']]); + Logger::info(Logger::CAT_GAME, 'reset_boot_success', ['table_id' => $tableInfo['id']]); }else{ $ws->emit('resetBoot', ['status' => false, 'msg' => $modelRes['msg']]); + Logger::warn(Logger::CAT_GAME, 'reset_boot_fail', ['table_id' => $tableInfo['id'], 'reason' => $modelRes['msg']]); } }else{ $ws->emit('resetBoot', ['status' => false, 'msg' => $preliminaryCheckRes['msg']]); + Logger::warn(Logger::CAT_GAME, 'reset_boot_fail', ['reason' => $preliminaryCheckRes['msg']]); } } } diff --git a/app/models/.DS_Store b/app/models/.DS_Store deleted file mode 100644 index ea10e25..0000000 Binary files a/app/models/.DS_Store and /dev/null differ diff --git a/app/models/process/NumberTab.php b/app/models/process/NumberTab.php index 1861cb3..d15798b 100644 --- a/app/models/process/NumberTab.php +++ b/app/models/process/NumberTab.php @@ -136,7 +136,7 @@ class NumberTab extends BaseModel { $numberTabInfo = self::get(['id' => $numberTabId]); if (!$numberTabInfo) return ['status' => false, 'msg' => 'end_bet_fail']; - if ($numberTabInfo['bet_status'] != 1) return ['status' => false, 'msg' => 'end_bet_error']; + if ($numberTabInfo['bet_status'] != 1) return ['status' => false, 'msg' => 'end_bet_error', 'bet_status' => $numberTabInfo['bet_status']]; self::where(['id' => $numberTabInfo['id']])->update(['bet_status' => 2, 'bet_end_time' => time()]); $numberTabInfo['bet_status'] = 2; $numberTabInfo['bet_start_time'] = time(); @@ -687,6 +687,9 @@ class NumberTab extends BaseModel 'result_before_edit' => $numberTabInfo['result'], 'pair' => $event['pair'], 'pair_before_edit' => $numberTabInfo['pair'], + 'luck_six' => intval($event['luck_six'] ?? 0), + 'dragon_seven' => intval($event['dragon_seven'] ?? 0), + 'panda_eight' => intval($event['panda_eight'] ?? 0), ); NumberTab::where(['id' => $numberTabInfo['id']])->update($updateNumberTab); diff --git a/app/services/.DS_Store b/app/services/.DS_Store deleted file mode 100644 index 976f0c9..0000000 Binary files a/app/services/.DS_Store and /dev/null differ diff --git a/app/services/bet/ToBetBaccaratService.php b/app/services/bet/ToBetBaccaratService.php index ac9d082..e52f182 100644 --- a/app/services/bet/ToBetBaccaratService.php +++ b/app/services/bet/ToBetBaccaratService.php @@ -4,6 +4,7 @@ namespace app\services\bet; use app\models\bet\Bet; +use app\utils\Logger; use freedom\utils\SocketSession; /** @@ -156,8 +157,10 @@ class ToBetBaccaratService ), ); $ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_BET, 'baccarat_bet_success', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); }else{ $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']); + Logger::warn(Logger::CAT_BET, 'baccarat_bet_db_fail', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); } SocketSession::resetRepeat($fd,'user','isToBet'); } diff --git a/app/services/bet/ToBetCommonService.php b/app/services/bet/ToBetCommonService.php index a5c11fe..858d5ad 100644 --- a/app/services/bet/ToBetCommonService.php +++ b/app/services/bet/ToBetCommonService.php @@ -9,6 +9,7 @@ use app\models\process\NumberTab; use app\models\user\User; use app\models\user\Session; use app\services\connect\InitTableService; +use app\utils\Logger; class ToBetCommonService { @@ -24,48 +25,61 @@ class ToBetCommonService /** 通用检验重复部分开始 */ $amount = array_sum($data); if ($amount == 0){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['reason' => 'to_bet_fail_6', 'detail' => 'zero_amount']); return ['status' => false, 'msg' => 'to_bet_fail_6']; } $numberTabId = isset($event['number_tab_id']) && intval($event['number_tab_id']) > 0 ? intval($event['number_tab_id']) : 0; $userId = isset($event['user_id']) && intval($event['user_id']) > 0 ? intval($event['user_id']) : 0; $userInfo = User::get(['id' => $userId, 'status' => 1, 'is_delete' => 0]); - if (!$userInfo) return ['status' => false, 'msg' => 'to_bet_fail_2']; + if (!$userInfo) { + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_2', 'detail' => 'user_not_found']); + return ['status' => false, 'msg' => 'to_bet_fail_2']; + } if($userInfo['bet_type'] == 2){ $session_id = $userInfo['api_token']; $sessionInfo = Session::get(['session_id' => $session_id]); if(!$sessionInfo){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_9', 'detail' => 'session_not_found']); return ['status' => false, 'msg' => 'to_bet_fail_9']; } if(!$sessionInfo['server_status']){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_10', 'detail' => 'server_status_off']); return ['status' => false, 'msg' => 'to_bet_fail_10']; } } // 使用 InitTableService::initTable 获取当前靴的最新一局,与其他服务保持一致 $numberTabInfo = InitTableService::initTable($tableInfo); if ($numberTabInfo['id'] != $numberTabId){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_5', 'detail' => 'number_tab_mismatch']); return ['status' => false, 'msg' => 'to_bet_fail_5']; } if ($numberTabInfo['bet_status'] != 1 || time() > ($numberTabInfo['bet_start_time'] + $tableInfo['wait_time'])){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_4', 'detail' => 'bet_closed_or_timeout']); return ['status' => false, 'msg' => 'to_bet_fail_4']; } // 超过50局幸运6禁止下注 if ($numberTabInfo['number'] > 50 && isset($event['luck_six_amount']) && $event['luck_six_amount'] > 0){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_7', 'detail' => 'luck_six_over_50_rounds']); return ['status' => false, 'msg' => 'to_bet_fail_7']; } // 超过30局大小禁止下注 if ($numberTabInfo['number'] > 30 && isset($event['big_amount']) && $event['big_amount'] > 0){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_8', 'detail' => 'big_over_30_rounds']); return ['status' => false, 'msg' => 'to_bet_fail_8']; } if ($numberTabInfo['number'] > 30 && isset($event['small_amount']) && $event['small_amount'] > 0){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_8', 'detail' => 'small_over_30_rounds']); return ['status' => false, 'msg' => 'to_bet_fail_8']; } if($userInfo['win_limit'] > 0){ $winTotalToday = Bet::getWinTotalToday($userInfo['id']); if($winTotalToday >= $userInfo['win_limit']){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'win_limit_tip', 'detail' => 'daily_win_limit_reached']); return ['status' => false, 'msg' => 'win_limit_tip']; } } if ($userInfo['money'] < $amount){ + Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_1', 'detail' => 'insufficient_balance']); return ['status' => false, 'msg' => 'to_bet_fail_1']; } return ['status' => true, 'numberTabInfo' => $numberTabInfo, 'userInfo' => $userInfo]; diff --git a/app/services/bet/ToBetDiceService.php b/app/services/bet/ToBetDiceService.php index 45fc8bc..a0cd560 100644 --- a/app/services/bet/ToBetDiceService.php +++ b/app/services/bet/ToBetDiceService.php @@ -3,6 +3,7 @@ namespace app\services\bet; use app\models\bet\Bet; +use app\utils\Logger; use freedom\utils\DiceUtil; use freedom\utils\SocketSession; @@ -33,6 +34,7 @@ class ToBetDiceService{ $time = time(); $toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data); if ($toBetCheck['status'] == false){ + Logger::warn(Logger::CAT_BET, 'dice_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); SocketSession::resetRepeat($fd,'user','isToBet'); return; @@ -90,6 +92,7 @@ class ToBetDiceService{ $res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0); $numberTabAmount = string_to_array($numberTabInfo['dice_amount']); if($res){ + Logger::info(Logger::CAT_BET, 'dice_bet_success', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']); $totalAmountArray = DiceUtil::amountInc($numberTabAmount, $data); $round = [ @@ -98,6 +101,7 @@ class ToBetDiceService{ ]; $ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); }else{ + Logger::warn(Logger::CAT_BET, 'dice_bet_db_fail', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']); } SocketSession::resetRepeat($fd,'user','isToBet'); diff --git a/app/services/bet/ToBetDtService.php b/app/services/bet/ToBetDtService.php index d9ffa24..d4a3436 100644 --- a/app/services/bet/ToBetDtService.php +++ b/app/services/bet/ToBetDtService.php @@ -5,6 +5,7 @@ namespace app\services\bet; use app\models\bet\Bet; +use app\utils\Logger; use freedom\utils\SocketSession; /** @@ -32,6 +33,7 @@ class ToBetDtService $time = time(); $toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data); if ($toBetCheck['status'] == false){ + Logger::warn(Logger::CAT_BET, 'dt_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); SocketSession::resetRepeat($fd,'user','isToBet'); return; @@ -107,6 +109,7 @@ class ToBetDtService $res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0); if($res){ + Logger::info(Logger::CAT_BET, 'dt_bet_success', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']); if($userInfo['bet_type'] == 2){ $tableManager = app('swoole.table.manager'); @@ -128,6 +131,7 @@ class ToBetDtService ); $ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); }else{ + Logger::warn(Logger::CAT_BET, 'dt_bet_db_fail', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']); } SocketSession::resetRepeat($fd,'user','isToBet'); diff --git a/app/services/bet/ToBetNnService.php b/app/services/bet/ToBetNnService.php index 9bf30c2..87cba7b 100644 --- a/app/services/bet/ToBetNnService.php +++ b/app/services/bet/ToBetNnService.php @@ -4,6 +4,7 @@ namespace app\services\bet; use app\models\bet\Bet; +use app\utils\Logger; use freedom\utils\SocketSession; /** @@ -49,6 +50,7 @@ class ToBetNnService $time = time(); $toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data); if ($toBetCheck['status'] == false){ + Logger::warn(Logger::CAT_BET, 'nn_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); SocketSession::resetRepeat($fd,'user','isToBet'); return; @@ -181,9 +183,11 @@ class ToBetNnService $res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0); if($res){ + Logger::info(Logger::CAT_BET, 'nn_bet_success', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']); // 待确定是否推送即时彩池,现不推送 }else{ + Logger::warn(Logger::CAT_BET, 'nn_bet_db_fail', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']); } SocketSession::resetRepeat($fd,'user','isToBet'); diff --git a/app/services/bet/ToBetRouletteService.php b/app/services/bet/ToBetRouletteService.php index 83e4a34..71c5a64 100644 --- a/app/services/bet/ToBetRouletteService.php +++ b/app/services/bet/ToBetRouletteService.php @@ -3,6 +3,7 @@ namespace app\services\bet; use app\models\bet\Bet; +use app\utils\Logger; use freedom\utils\RouletteUtil; use freedom\utils\SocketSession; @@ -36,6 +37,7 @@ class ToBetRouletteService{ $time = time(); $toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data); if ($toBetCheck['status'] == false){ + Logger::warn(Logger::CAT_BET, 'roulette_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); SocketSession::resetRepeat($fd,'user','isToBet'); return; @@ -54,6 +56,7 @@ class ToBetRouletteService{ $res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0,$fieldName); $numberTabAmount = string_to_array($numberTabInfo[$fieldName]); if($res){ + Logger::info(Logger::CAT_BET, 'roulette_bet_success', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => [$fieldName => $betTotalAmount], 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']); $totalAmountArray = RouletteUtil::amountInc($numberTabAmount, $data); $round = [ @@ -62,6 +65,7 @@ class ToBetRouletteService{ ]; $ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); }else{ + Logger::warn(Logger::CAT_BET, 'roulette_bet_db_fail', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']); } SocketSession::resetRepeat($fd,'user','isToBet'); diff --git a/app/services/bet/ToBetTcService.php b/app/services/bet/ToBetTcService.php index b1fbab4..f101426 100644 --- a/app/services/bet/ToBetTcService.php +++ b/app/services/bet/ToBetTcService.php @@ -4,6 +4,7 @@ namespace app\services\bet; use app\models\bet\Bet; +use app\utils\Logger; use freedom\utils\SocketSession; /** @@ -50,6 +51,7 @@ class ToBetTcService $time = time(); $toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data); if ($toBetCheck['status'] == false){ + Logger::warn(Logger::CAT_BET, 'tc_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); SocketSession::resetRepeat($fd,'user','isToBet'); return; @@ -182,9 +184,11 @@ class ToBetTcService $res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0); if($res){ + Logger::info(Logger::CAT_BET, 'tc_bet_success', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']); // 待确定是否推送即时彩池,现不推送 }else{ + Logger::warn(Logger::CAT_BET, 'tc_bet_db_fail', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']); } SocketSession::resetRepeat($fd,'user','isToBet'); diff --git a/app/services/bet/ToBetToningService.php b/app/services/bet/ToBetToningService.php index e718612..e6263f1 100644 --- a/app/services/bet/ToBetToningService.php +++ b/app/services/bet/ToBetToningService.php @@ -4,6 +4,7 @@ namespace app\services\bet; use app\models\bet\Bet; +use app\utils\Logger; use freedom\utils\SocketSession; /** @@ -36,6 +37,7 @@ class ToBetToningService $time = time(); $toBetCheck = ToBetCommonService::toBetCheck($tableInfo,$event,$data); if ($toBetCheck['status'] == false){ + Logger::warn(Logger::CAT_BET, 'toning_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => $toBetCheck['msg']]); SocketSession::resetRepeat($fd,'user','isToBet'); return; @@ -89,6 +91,7 @@ class ToBetToningService $res = Bet::toBet($tableInfo,$userInfo,$numberTabInfo,$prevBetInfo,$data,$seat_num,$betTotalAmount,$time,0); $numberTabAmount = string_to_array($numberTabInfo['toning_amount']); if($res){ + Logger::info(Logger::CAT_BET, 'toning_bet_success', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => true, 'table_id' => $tableInfo['id'], 'bet_amount_msg' => $betTotalAmount, 'money' => ($userInfo['money'] - $amount),'seat_num' => $seat_num, 'msg' => 'to_bet_success']); $round = array( 'toning_zero' => isset($numberTabAmount['toning_zero']) ? intval($numberTabAmount['toning_zero'] + $data['toning_zero']) : $data['toning_zero'], @@ -113,6 +116,7 @@ class ToBetToningService ); $ws->to(SocketSession::HOUSE_NAME)->emit('allBetAmount',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); }else{ + Logger::warn(Logger::CAT_BET, 'toning_bet_db_fail', ['user_id' => $userInfo['id'], 'table_id' => $tableInfo['id'], 'amount' => $amount]); $ws->emit('toBet',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'to_bet_fail']); } SocketSession::resetRepeat($fd,'user','isToBet'); diff --git a/app/services/connect/InitTableService.php b/app/services/connect/InitTableService.php index 3775e12..055916e 100644 --- a/app/services/connect/InitTableService.php +++ b/app/services/connect/InitTableService.php @@ -7,6 +7,7 @@ namespace app\services\connect; use app\models\process\Boot; use app\models\process\NumberTab; use app\models\process\Sumday; +use app\utils\Logger; /** * TODO 桌子状态服务 @@ -22,15 +23,24 @@ class InitTableService */ public static function initTable(array $tableInfo): array { - //查询日结 $lastSumday = Sumday::getByTableIdOrderByIdDesc($tableInfo); - if (!$lastSumday) $lastSumday = Sumday::addByTable($tableInfo); - //查询靴 + if (!$lastSumday) { + $lastSumday = Sumday::addByTable($tableInfo); + Logger::info(Logger::CAT_GAME, 'init_create_sumday', ['table_id' => $tableInfo['id']]); + } $lastBoot = Boot::getByTableIdOrderByIdDesc($tableInfo); - if (!$lastBoot) $lastBoot = Boot::addBySumday($lastSumday); - //查询铺 + if (!$lastBoot) { + $lastBoot = Boot::addBySumday($lastSumday); + Logger::info(Logger::CAT_GAME, 'init_create_boot', ['table_id' => $tableInfo['id'], 'sumday_id' => $lastSumday['id'] ?? '']); + } $lastNumberTab = NumberTab::getByBootIdOrderByIdDesc($lastBoot); - if (!$lastNumberTab) $lastNumberTab = NumberTab::addByBoot($lastBoot); + if (!$lastNumberTab) { + $lastNumberTab = NumberTab::addByBoot($lastBoot); + Logger::info(Logger::CAT_GAME, 'init_create_number_tab', ['table_id' => $tableInfo['id'], 'boot_id' => $lastBoot['id'] ?? '']); + } + if (!$lastNumberTab) { + Logger::warn(Logger::CAT_GAME, 'init_table_fail', ['table_id' => $tableInfo['id'], 'table_name' => $tableInfo['table_name'] ?? '']); + } return $lastNumberTab; } diff --git a/app/services/connect/ScanConnectService.php b/app/services/connect/ScanConnectService.php index e3c3850..7000e95 100644 --- a/app/services/connect/ScanConnectService.php +++ b/app/services/connect/ScanConnectService.php @@ -6,6 +6,7 @@ namespace app\services\connect; use app\models\process\NumberTab; use app\models\table\Table; +use app\utils\Logger; use freedom\utils\SocketSession; use think\Request; @@ -30,6 +31,7 @@ class ScanConnectService if (!$numberTabInfo){ $ws->emit('onlineLogin',['status' => false, 'msg' => 'Not NumberTab Data']); $ws->close(); + Logger::warn(Logger::CAT_CONNECT, 'scan_connect_fail', ['table_id' => $tableId, 'reason' => 'no_number_tab_data']); return; } $round = array(); @@ -45,5 +47,6 @@ class ScanConnectService } $ws->join(SocketSession::HOUSE_NAME); $ws->emit('onlineLogin',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_CONNECT, 'scan_connect_success', ['table_id' => $tableId]); } } diff --git a/app/services/connect/SpaceConnectService.php b/app/services/connect/SpaceConnectService.php index dbba321..c69127a 100644 --- a/app/services/connect/SpaceConnectService.php +++ b/app/services/connect/SpaceConnectService.php @@ -6,6 +6,7 @@ namespace app\services\connect; use app\models\table\Table; use app\models\table\UserController; +use app\utils\Logger; use freedom\utils\SocketSession; use think\Request; @@ -38,8 +39,8 @@ class SpaceConnectService $username = trim($event->get('account')); $userController = UserController::get(['id' => $userId, 'username' => $username, 'login_token' => $loginToken]); if (!$tableInfo || !$userController){ + Logger::warn(Logger::CAT_CONNECT, 'space_auth_fail', ['table_id' => $tableId, 'username' => $username, 'has_table' => !!$tableInfo, 'has_user' => !!$userController]); $ws->emit('onlineLogin',['status' => false, 'msg' => 'not_table_data']); - //$ws->close(); return; } $lastNumberTab = InitTableService::initTable($tableInfo); @@ -54,7 +55,9 @@ class SpaceConnectService $round['show_card'] = GetCardService::getCard($tableInfo,$lastNumberTab); $ws->emit('onlineLogin',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); SocketSession::saveSocketSession(['table_id' => $tableInfo['id'], 'table_name' => $tableInfo['table_name']],'space'); + Logger::info(Logger::CAT_CONNECT, 'space_login_ok', ['table_id' => $tableInfo['id'], 'table_name' => $tableInfo['table_name'], 'username' => $username]); }else{ + Logger::warn(Logger::CAT_CONNECT, 'space_init_fail', ['table_id' => $tableId, 'username' => $username]); $ws->emit('onlineLogin',['status' => false, 'table_id' => $tableInfo['id'], 'msg' => 'link_server_fail']); //$ws->close(); } diff --git a/app/services/connect/UserConnectService.php b/app/services/connect/UserConnectService.php index 4557250..89f39ab 100644 --- a/app/services/connect/UserConnectService.php +++ b/app/services/connect/UserConnectService.php @@ -5,6 +5,7 @@ namespace app\services\connect; use app\models\user\User; +use app\utils\Logger; use freedom\utils\SocketSession; use think\Request; @@ -30,13 +31,16 @@ class UserConnectService if($userInfo && $userInfo['login_token'] == $loginToken && $username == $userInfo['username']){ SocketSession::saveSocketSession(['user_id' => $userId, 'username' => $username],'user'); $ws->emit('onlineLogin',['status' => true, 'money' => $userInfo['money']]); + Logger::info(Logger::CAT_CONNECT, 'user_login_success', ['user_id' => $userId, 'username' => $username]); }else{ $ws->emit('onlineLogin',['status' => false, 'money' => 0, 'msg' => 'link_server_fail']); $ws->close(); + Logger::warn(Logger::CAT_CONNECT, 'user_login_auth_fail', ['user_id' => $userId, 'username' => $username, 'reason' => 'token_or_user_mismatch']); } }else{ $ws->emit('onlineLogin',['status' => false, 'money' => 0, 'msg' => 'link_server_fail']); $ws->close(); + Logger::warn(Logger::CAT_CONNECT, 'user_login_param_missing', ['user_id' => $userId, 'username' => $username ?? '']); } } } \ No newline at end of file diff --git a/app/services/opening/OpeningBaccaratService.php b/app/services/opening/OpeningBaccaratService.php index 2c6b2bb..c6fc706 100644 --- a/app/services/opening/OpeningBaccaratService.php +++ b/app/services/opening/OpeningBaccaratService.php @@ -11,6 +11,7 @@ use app\services\waybill\WaybillRemindService; use freedom\utils\CardPosition; use freedom\utils\RedisUtil; use freedom\utils\SocketSession; +use app\utils\Logger; use think\swoole\Websocket; /** @@ -32,6 +33,7 @@ class OpeningBaccaratService //判断结果并推送结果 $res = self::doOpening($event,$tableInfo); if ($res['status'] == false){ + Logger::warn(Logger::CAT_GAME, 'opening_baccarat_fail', ['table_id' => $tableInfo['id'], 'msg' => $res['msg']]); $ws->emit('openingBaccarat',['status' => false, 'msg' => $res['msg']]); return; } @@ -52,6 +54,7 @@ class OpeningBaccaratService ); $ws->emit('openingBaccarat',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); $ws->to(SocketSession::HOUSE_NAME)->emit('openingBaccaratResult',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_GAME, 'opening_baccarat', ['table_id' => $tableInfo['id'], 'opening' => $opening, 'pair' => $pair, 'luck_six' => $luck_six]); //处理注单 self::doBet($ws,$tableInfo,$lastNumberTabInfo); //处理好路 @@ -141,6 +144,8 @@ class OpeningBaccaratService $banker_pair = intval($event['banker_pair']); $player_pair = intval($event['player_pair']); $luck_six = intval($event['luck_six']); + $dragon_seven = intval($event['dragon_seven'] ?? 0); + $panda_eight = intval($event['panda_eight'] ?? 0); //处理开盘 if($banker_pair == 1 && $player_pair == 2){ //庄闲对 @@ -157,7 +162,7 @@ class OpeningBaccaratService } if (!in_array($opening,[1,2,3])) return ['status' => false, 'msg' => 'opening_fail_3']; //开盘 - $numberTabUpdate = ['result' => $opening, 'pair' => $pair, 'luck_six' => $luck_six, 'big_small' => $big_small, 'end_time' => time(), 'bet_status' => 3]; + $numberTabUpdate = ['result' => $opening, 'pair' => $pair, 'luck_six' => $luck_six, 'dragon_seven' => $dragon_seven, 'panda_eight' => $panda_eight, 'big_small' => $big_small, 'end_time' => time(), 'bet_status' => 3]; $newNumberTabInfo = NumberTab::next($numberTabInfo,$numberTabUpdate,$tableInfo); if ($newNumberTabInfo){ $lastNumberTabInfo = array_merge($numberTabInfo,$numberTabUpdate); @@ -183,11 +188,7 @@ class OpeningBaccaratService } $amount = $v['banker_amount'] + $v['player_amount'] + $v['tie_amount'] + $v['banker_pair_amount'] + $v['player_pair_amount'] + $v['luck_six_amount'] + $v['big_amount'] + $v['small_amount']; $winMoney = 0; - // 双边洗码 $ximaliang = 0; - if($userInfo['type_xima'] == 1){ - $ximaliang = abs($v['banker_amount'] - $v['player_amount']); - } if($numberTabInfo['result'] == 1){ // 庄赢 if ($v['banker_amount'] > 0){ @@ -201,26 +202,26 @@ class OpeningBaccaratService $winMoney = round($v['banker_amount'] * (1 + $userInfo['price_banker']),2) + $winMoney; } } - // 单边洗码 - if($userInfo['type_xima'] == 2){ - $ximaliang = $v['player_amount']; + if($userInfo['type_xima'] == 1){ + $ximaliang = $amount; + }else{ + $ximaliang += $v['player_amount'] + $v['tie_amount']; } }elseif($numberTabInfo['result'] == 2){ // 闲赢 if($v['player_amount'] > 0){ $winMoney = $v['player_amount'] * (1 + $userInfo['price_player']) + $winMoney; } - // 单边洗码 - if($userInfo['type_xima'] == 2){ - $ximaliang = $v['banker_amount']; + if($userInfo['type_xima'] == 1){ + $ximaliang = $amount; + }else{ + $ximaliang += $v['banker_amount'] + $v['tie_amount']; } }elseif($numberTabInfo['result'] == 3) { - $ximaliang = 0; - // 和赢 + // 和赢:庄闲退回,开和不计洗码 if($v['tie_amount'] > 0){ $winMoney = $v['tie_amount'] * (1 + $userInfo['price_tie_baccarat']) + $winMoney; } - // 开 和,下注庄和闲不扣钱 if($v['banker_amount'] > 0 && $v['player_amount'] > 0){ $winMoney = $v['player_amount'] + $v['banker_amount'] + $winMoney; }elseif($v['banker_amount'] > 0){ @@ -229,12 +230,11 @@ class OpeningBaccaratService $winMoney = $v['player_amount'] + $winMoney; } } + // 对子 if($numberTabInfo['pair'] == 3){ - // 计算庄对下注的赢钱金额 if ($v['banker_pair_amount'] > 0) { $winMoney = $v['banker_pair_amount'] * (1 + $userInfo['price_pair']) + $winMoney; } - //计算闲对下注的赢钱金额 if ($v['player_pair_amount'] > 0) { $winMoney = $v['player_pair_amount'] * (1 + $userInfo['price_pair']) + $winMoney; } @@ -242,22 +242,32 @@ class OpeningBaccaratService if ($v['banker_pair_amount'] > 0) { $winMoney = $v['banker_pair_amount'] * (1 + $userInfo['price_pair']) + $winMoney; } + if($userInfo['type_xima'] != 1) $ximaliang += $v['player_pair_amount']; }elseif($numberTabInfo['pair'] == 2){ if ($v['player_pair_amount'] > 0) { $winMoney = $v['player_pair_amount'] * (1 + $userInfo['price_pair']) + $winMoney; } + if($userInfo['type_xima'] != 1) $ximaliang += $v['banker_pair_amount']; + }else{ + if($userInfo['type_xima'] != 1) $ximaliang += $v['banker_pair_amount'] + $v['player_pair_amount']; } + // 幸运6 if ($numberTabInfo['luck_six'] == 2 && $v['luck_six_amount'] > 0){ $winMoney = $v['luck_six_amount'] * (1 + $userInfo['price_luck_six_2']) + $winMoney; - } - if ($numberTabInfo['luck_six'] == 3 && $v['luck_six_amount'] > 0){ + }elseif ($numberTabInfo['luck_six'] == 3 && $v['luck_six_amount'] > 0){ $winMoney = $v['luck_six_amount'] * (1 + $userInfo['price_luck_six_3']) + $winMoney; + }else{ + if($userInfo['type_xima'] != 1) $ximaliang += $v['luck_six_amount']; } + // 大小 if ($numberTabInfo['big_small'] == 1){ $winMoney = $v['big_amount'] * (1 + $userInfo['price_big']) + $winMoney; - } - if ($numberTabInfo['big_small'] == 2){ + if($userInfo['type_xima'] != 1) $ximaliang += $v['small_amount']; + }elseif ($numberTabInfo['big_small'] == 2){ $winMoney = $v['small_amount'] * (1 + $userInfo['price_small']) + $winMoney; + if($userInfo['type_xima'] != 1) $ximaliang += $v['big_amount']; + }else{ + if($userInfo['type_xima'] != 1) $ximaliang += $v['big_amount'] + $v['small_amount']; } // 计算最终赢钱金额 $winTotal = $winMoney - $amount; diff --git a/app/services/opening/OpeningDiceService.php b/app/services/opening/OpeningDiceService.php index bb8257a..bcc97ba 100644 --- a/app/services/opening/OpeningDiceService.php +++ b/app/services/opening/OpeningDiceService.php @@ -10,6 +10,7 @@ use app\models\user\User; use app\services\connect\InitTableService; use freedom\utils\DiceUtil; use freedom\utils\SocketSession; +use app\utils\Logger; use think\swoole\Websocket; /** @@ -31,6 +32,7 @@ class OpeningDiceService //判断结果并推送结果 $res = self::doOpening($event,$tableInfo); if ($res['status'] == false){ + Logger::warn(Logger::CAT_GAME, 'opening_dice_fail', ['table_id' => $tableInfo['id'], 'msg' => $res['msg']]); $ws->emit('openingDice',['status' => false, 'msg' => $res['msg']]); return; } @@ -47,6 +49,7 @@ class OpeningDiceService ); $ws->emit('openingDice',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); $ws->to(SocketSession::HOUSE_NAME)->emit('openingDiceResult',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_GAME, 'opening_dice', ['table_id' => $tableInfo['id'], 'result' => $resultArray]); //处理注单 self::doBet($ws,$tableInfo,$lastNumberTabInfo,$resultArray,$resultParse); } diff --git a/app/services/opening/OpeningDtService.php b/app/services/opening/OpeningDtService.php index 34e932c..4493983 100644 --- a/app/services/opening/OpeningDtService.php +++ b/app/services/opening/OpeningDtService.php @@ -13,6 +13,7 @@ use freedom\utils\CardPosition; use freedom\utils\RedisUtil; use freedom\utils\SocketSession; use think\facade\Env; +use app\utils\Logger; use think\swoole\Websocket; /** @@ -35,6 +36,7 @@ class OpeningDtService //判断结果并推送结果 $res = self::doOpening($event,$tableInfo); if ($res['status'] == false){ + Logger::warn(Logger::CAT_GAME, 'opening_dt_fail', ['table_id' => $tableInfo['id'], 'msg' => $res['msg']]); $ws->emit('openingDt',['status' => false, 'msg' => $res['msg']]); return; } @@ -52,6 +54,7 @@ class OpeningDtService ); $ws->emit('openingDt',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); $ws->to(SocketSession::HOUSE_NAME)->emit('openingDtResult',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_GAME, 'opening_dt', ['table_id' => $tableInfo['id'], 'opening' => $opening]); //处理注单 self::doBet($ws,$tableInfo,$lastNumberTabInfo); //处理好路 @@ -128,19 +131,16 @@ class OpeningDtService } $amount = $v['banker_amount'] + $v['player_amount'] + $v['tie_amount']; $winMoney = 0; - // 双边洗码 $ximaliang = 0; - if($userInfo['type_xima'] == 1){ - $ximaliang = abs($v['banker_amount'] - $v['player_amount']); - } // 龙赢 if ($numberTabInfo['result'] == 1) { if($v['banker_amount'] > 0){ $winMoney = round($v['banker_amount'] * (1 + $userInfo['price_dragon']),2) + $winMoney; } - // 单边洗码 - if($userInfo['type_xima'] == 2){ - $ximaliang = $v['player_amount']; + if($userInfo['type_xima'] == 1){ + $ximaliang = $amount; + }else{ + $ximaliang = $v['player_amount'] + $v['tie_amount']; } } // 虎赢 @@ -148,18 +148,15 @@ class OpeningDtService if($v['player_amount'] > 0){ $winMoney = round($v['player_amount'] * (1 + $userInfo['price_tiger']),2) + $winMoney; } - // 单边洗码 - if($userInfo['type_xima'] == 2){ - $ximaliang = $v['banker_amount']; + if($userInfo['type_xima'] == 1){ + $ximaliang = $amount; + }else{ + $ximaliang = $v['banker_amount'] + $v['tie_amount']; } } - // 和 + // 和:不杀龙虎,全额退回 if ($numberTabInfo['result'] == 3) { - if (Env::get('system.dt_half') == 1) { - $winMoney = round(($v['banker_amount'] + $v['player_amount']) / 2, 2) + $winMoney; - } else { - $winMoney = $v['banker_amount'] + $v['player_amount'] + $winMoney; - } + $winMoney = $v['banker_amount'] + $v['player_amount'] + $winMoney; $ximaliang = 0; if ($v['tie_amount'] > 0) { $winMoney = $v['tie_amount'] * (1 + $userInfo['price_tie_dt']) + $winMoney; diff --git a/app/services/opening/OpeningNnService.php b/app/services/opening/OpeningNnService.php index 71fdc2c..a96aa4e 100644 --- a/app/services/opening/OpeningNnService.php +++ b/app/services/opening/OpeningNnService.php @@ -11,6 +11,7 @@ use app\services\connect\InitTableService; use freedom\utils\CardPositionNn; use freedom\utils\RedisUtil; use freedom\utils\SocketSession; +use app\utils\Logger; use think\swoole\Websocket; class OpeningNnService @@ -26,6 +27,7 @@ class OpeningNnService //判断结果并推送结果 $res = self::doOpening($event,$tableInfo); if ($res['status'] == false){ + Logger::warn(Logger::CAT_GAME, 'opening_nn_fail', ['table_id' => $tableInfo['id'], 'msg' => $res['msg']]); $ws->emit('openingNn',['status' => false, 'msg' => $res['msg']]); return; } @@ -41,6 +43,7 @@ class OpeningNnService $round = array_merge($round,$data); $ws->emit('openingNn',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); $ws->to(SocketSession::HOUSE_NAME)->emit('openingNnResult',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_GAME, 'opening_nn', ['table_id' => $tableInfo['id'], 'result_banker' => $data['result_banker'], 'win_p1' => $data['win_player_1'], 'win_p2' => $data['win_player_2'], 'win_p3' => $data['win_player_3']]); //处理注单 self::doBet($ws,$tableInfo,$lastNumberTabInfo,$data); } diff --git a/app/services/opening/OpeningRouletteService.php b/app/services/opening/OpeningRouletteService.php index 8096ca4..5d81602 100644 --- a/app/services/opening/OpeningRouletteService.php +++ b/app/services/opening/OpeningRouletteService.php @@ -8,6 +8,7 @@ use app\models\process\Boot; use app\models\process\NumberTab; use app\models\user\User; use app\services\connect\InitTableService; +use app\utils\Logger; use freedom\utils\RouletteUtil; use freedom\utils\SocketSession; use think\swoole\Websocket; @@ -31,6 +32,7 @@ class OpeningRouletteService //判断结果并推送结果 $res = self::doOpening($event,$tableInfo); if ($res['status'] == false){ + Logger::warn(Logger::CAT_GAME, 'opening_roulette_fail', ['table_id' => $tableInfo['id'], 'msg' => $res['msg']]); $ws->emit('openingRoulette',['status' => false,'table_id' => $tableInfo['id'], 'msg' => $res['msg']]); return; } @@ -47,6 +49,7 @@ class OpeningRouletteService ); $ws->emit('openingRoulette',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); $ws->to(SocketSession::HOUSE_NAME)->emit('openingRouletteResult',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_GAME, 'opening_roulette', ['table_id' => $tableInfo['id'], 'result' => $round['result'] ?? '']); //处理注单 self::doBet($ws,$tableInfo,$lastNumberTabInfo,$result,$resultParse); } diff --git a/app/services/opening/OpeningTcService.php b/app/services/opening/OpeningTcService.php index 536b5e7..8dc2a5e 100644 --- a/app/services/opening/OpeningTcService.php +++ b/app/services/opening/OpeningTcService.php @@ -11,6 +11,7 @@ use app\services\connect\InitTableService; use freedom\utils\CardPositionTc; use freedom\utils\RedisUtil; use freedom\utils\SocketSession; +use app\utils\Logger; use think\swoole\Websocket; class OpeningTcService @@ -26,6 +27,7 @@ class OpeningTcService //判断结果并推送结果 $res = self::doOpening($event,$tableInfo); if ($res['status'] == false){ + Logger::warn(Logger::CAT_GAME, 'opening_tc_fail', ['table_id' => $tableInfo['id'], 'msg' => $res['msg']]); $ws->emit('openingTc',['status' => false, 'msg' => $res['msg']]); return; } @@ -41,6 +43,7 @@ class OpeningTcService $round = array_merge($round,$data); $ws->emit('openingTc',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); $ws->to(SocketSession::HOUSE_NAME)->emit('openingTcResult',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_GAME, 'opening_tc', ['table_id' => $tableInfo['id'], 'result_banker' => $data['result_banker'], 'win_p1' => $data['win_player_1'], 'win_p2' => $data['win_player_2'], 'win_p3' => $data['win_player_3']]); //处理注单 self::doBet($ws,$tableInfo,$lastNumberTabInfo,$data); } diff --git a/app/services/opening/OpeningToningService.php b/app/services/opening/OpeningToningService.php index abc161a..56a3bd6 100644 --- a/app/services/opening/OpeningToningService.php +++ b/app/services/opening/OpeningToningService.php @@ -10,6 +10,7 @@ use app\models\user\User; use app\services\connect\InitTableService; use freedom\utils\SocketSession; use freedom\utils\ToningUtil; +use app\utils\Logger; use think\swoole\Websocket; /** @@ -31,6 +32,7 @@ class OpeningToningService //判断结果并推送结果 $res = self::doOpening($event,$tableInfo); if ($res['status'] == false){ + Logger::warn(Logger::CAT_GAME, 'opening_toning_fail', ['table_id' => $tableInfo['id'], 'msg' => $res['msg']]); $ws->emit('openingToning',['status' => false, 'msg' => $res['msg']]); return; } @@ -46,6 +48,7 @@ class OpeningToningService ); $ws->emit('openingToning',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); $ws->to(SocketSession::HOUSE_NAME)->emit('openingToningResult',['status' => true, 'table_id' => $tableInfo['id'], 'round' => $round]); + Logger::info(Logger::CAT_GAME, 'opening_toning', ['table_id' => $tableInfo['id'], 'result' => $result]); //处理注单 self::doBet($ws,$tableInfo,$lastNumberTabInfo); } diff --git a/app/services/process/CountdownService.php b/app/services/process/CountdownService.php index f40b387..c31158a 100644 --- a/app/services/process/CountdownService.php +++ b/app/services/process/CountdownService.php @@ -27,7 +27,7 @@ class CountdownService //处理倒计时 $waitTime = intval($tableInfo['wait_time']); //将倒计时用作是redis的过期时间 - RedisUtil::save('countdown_'.$numberTabInfo['id'],$waitTime,$waitTime); + RedisUtil::save('countdown_'.$numberTabInfo['id'],$waitTime,$waitTime + 10); while($waitTime >= 0){ $countdown = Cache::store('redis')->get('countdown_'.$numberTabInfo['id']); if ($countdown){ diff --git a/app/services/process/EndBetService.php b/app/services/process/EndBetService.php index 68a9aa3..6d9c2ee 100644 --- a/app/services/process/EndBetService.php +++ b/app/services/process/EndBetService.php @@ -6,6 +6,7 @@ namespace app\services\process; use app\models\process\NumberTab; use app\services\connect\InitTableService; +use app\utils\Logger; use freedom\utils\RedisUtil; use freedom\utils\SocketSession; @@ -41,8 +42,10 @@ class EndBetService 'number_tab_status' => InitTableService::numberTabStatus($numberTabInfo) ] ]); + Logger::info(Logger::CAT_GAME, 'end_bet', ['table_id' => $tableInfo['id'], 'nt_id' => $numberTabId]); }else{ - $ws->emit('endBet', ['status' => false, 'msg' => $modelRes['msg']]); + Logger::warn(Logger::CAT_GAME, 'end_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $modelRes['msg'], 'bet_status' => $modelRes['bet_status'] ?? null]); + $ws->emit('endBet', ['status' => false, 'msg' => $modelRes['msg'], 'bet_status' => $modelRes['bet_status'] ?? null]); } } } \ No newline at end of file diff --git a/app/services/process/ResetNumberTabService.php b/app/services/process/ResetNumberTabService.php index 686a01e..60eea21 100644 --- a/app/services/process/ResetNumberTabService.php +++ b/app/services/process/ResetNumberTabService.php @@ -6,6 +6,7 @@ namespace app\services\process; use app\models\process\NumberTab; use app\services\connect\InitTableService; +use app\utils\Logger; use freedom\utils\SocketSession; /** @@ -26,15 +27,15 @@ class ResetNumberTabService $numberTabInfo = InitTableService::initTable($tableInfo); if (!$numberTabInfo){ $ws->emit('resetNumberTab', ['status' => false, 'msg' => 'not_number_tab_data']); + Logger::warn(Logger::CAT_GAME, 'reset_number_tab_fail', ['table_id' => $tableInfo['id'], 'reason' => 'not_number_tab_data']); return; } - // 调试日志 - \think\facade\Log::write('resetNumberTab debug: bet_status=' . $numberTabInfo['bet_status'] . ', rob_status=' . $numberTabInfo['rob_status'] . ', id=' . $numberTabInfo['id'] . ', boot_id=' . $numberTabInfo['boot_id'], 'info'); - if($numberTabInfo['bet_status'] == 1 || $numberTabInfo['bet_status'] == 2 || ($numberTabInfo['bet_status'] == 0 && $numberTabInfo['rob_status'] == 1) || ($numberTabInfo['bet_status'] == 0 && $numberTabInfo['rob_status'] == 2)){ + Logger::info(Logger::CAT_GAME, 'reset_number_tab_attempt', ['table_id' => $tableInfo['id'], 'bet_status' => $numberTabInfo['bet_status'], 'nt_id' => $numberTabInfo['id']]); + if($numberTabInfo['bet_status'] == 1 || $numberTabInfo['bet_status'] == 2 || $numberTabInfo['bet_status'] == 3 || ($numberTabInfo['bet_status'] == 0 && ($numberTabInfo['rob_status'] == 1 || $numberTabInfo['rob_status'] == 2))){ //事务处理 $res = NumberTab::resetNumberTab($numberTabInfo); - \think\facade\Log::write('resetNumberTab result: ' . ($res ? 'true' : 'false'), 'info'); if (!$res){ + Logger::warn(Logger::CAT_GAME, 'reset_number_tab_fail', ['table_id' => $tableInfo['id'], 'nt_id' => $numberTabInfo['id']]); $ws->emit('resetNumberTab', ['status' => false, 'msg' => 'reset_number_fail']); return; } @@ -55,8 +56,10 @@ class ResetNumberTabService $ws->to(SocketSession::HOUSE_NAME)->emit('resetNumberTab', $responseData); // 同时发送给请求者 $ws->emit('resetNumberTab', $responseData); + Logger::info(Logger::CAT_GAME, 'reset_number_tab', ['table_id' => $tableInfo['id'], 'nt_id' => $numberTabInfo['id']]); }else{ $ws->emit('resetNumberTab', ['status' => false, 'msg' => 'reset_number_fail']); + Logger::warn(Logger::CAT_GAME, 'reset_number_tab_fail', ['table_id' => $tableInfo['id'], 'number_tab_id' => $numberTabInfo['id'], 'reason' => 'invalid_bet_status']); } } } \ No newline at end of file diff --git a/app/services/process/StartBetService.php b/app/services/process/StartBetService.php index 6d8ac17..846735c 100644 --- a/app/services/process/StartBetService.php +++ b/app/services/process/StartBetService.php @@ -6,6 +6,7 @@ namespace app\services\process; use app\models\process\NumberTab; use app\services\connect\InitTableService; +use app\utils\Logger; use freedom\utils\SocketSession; /** @@ -44,7 +45,9 @@ class StartBetService $ws->emit('startBet', $responseData); //启动倒计时(该处以后会废弃掉) CountdownService::countdown($numberTabId,$tableInfo,$modelRes['data']); + Logger::info(Logger::CAT_GAME, 'start_bet', ['table_id' => $tableInfo['id'], 'table_name' => $tableInfo['table_name'], 'nt_id' => $numberTabId]); }else{ + Logger::warn(Logger::CAT_GAME, 'start_bet_fail', ['table_id' => $tableInfo['id'], 'msg' => $modelRes['msg']]); $ws->emit('startBet', ['status' => false, 'msg' => $modelRes['msg']]); } } diff --git a/app/services/reset/ResetBaccaratService.php b/app/services/reset/ResetBaccaratService.php index 3eee4a5..7a549c1 100644 --- a/app/services/reset/ResetBaccaratService.php +++ b/app/services/reset/ResetBaccaratService.php @@ -4,6 +4,7 @@ namespace app\services\reset; use app\models\process\NumberTab; +use app\utils\Logger; use freedom\utils\SocketSession; use think\swoole\Websocket; @@ -27,25 +28,29 @@ class ResetBaccaratService $numberTabInfo = NumberTab::getByTableIdOrderByIdDesc_two($tableInfo); if (!$numberTabInfo){ $ws->emit('resetBaccarat', ['status' => false, 'msg' => 'not_number_tab_data']); + Logger::warn(Logger::CAT_GAME, 'reset_baccarat_fail', ['table_id' => $tableInfo['id'], 'reason' => 'not_number_tab_data']); return; } if(count($numberTabInfo) != 2){ $ws->emit('resetBaccarat', ['status' => false, 'msg' => '上一铺数据不存在']); + Logger::warn(Logger::CAT_GAME, 'reset_baccarat_fail', ['table_id' => $tableInfo['id'], 'reason' => 'previous_round_not_found']); return; } if($numberTabInfo[0]['boot_id'] != $numberTabInfo[1]['boot_id']){ $ws->emit('resetBaccarat', ['status' => false, 'msg' => '上一铺不在同一靴']); + Logger::warn(Logger::CAT_GAME, 'reset_baccarat_fail', ['table_id' => $tableInfo['id'], 'reason' => 'boot_mismatch']); return; } $numberTabInfo = $numberTabInfo[1]; - if($event['opening'] == $numberTabInfo['result'] && $event['pair'] == $numberTabInfo['pair'] && $event['luck_six'] == $numberTabInfo['luck_six']){ + if($event['opening'] == $numberTabInfo['result'] && $event['pair'] == $numberTabInfo['pair'] && ($event['luck_six'] ?? 0) == $numberTabInfo['luck_six'] && ($event['dragon_seven'] ?? 0) == $numberTabInfo['dragon_seven'] && ($event['panda_eight'] ?? 0) == $numberTabInfo['panda_eight']){ $ws->emit('resetBaccarat', ['status' => false, 'msg' => '结果一样']); return; } $res = NumberTab::resetBaccarat($event,$numberTabInfo,$tableInfo); if (!$res){ $ws->emit('resetBaccarat', ['status' => false, 'msg' => '修改上一局结果失败']); + Logger::warn(Logger::CAT_GAME, 'reset_baccarat_fail', ['table_id' => $tableInfo['id'], 'number_tab_id' => $numberTabInfo['id'], 'reason' => 'db_update_failed']); return; } @@ -56,5 +61,6 @@ class ResetBaccaratService 'previous_number_tab_id' => $numberTabInfo['id'] ] ]); + Logger::info(Logger::CAT_GAME, 'reset_baccarat', ['table_id' => $tableInfo['id'], 'opening' => $event['opening'], 'pair' => $event['pair']]); } } \ No newline at end of file diff --git a/app/services/reset/ResetDtService.php b/app/services/reset/ResetDtService.php index 761cf6a..32acfd4 100644 --- a/app/services/reset/ResetDtService.php +++ b/app/services/reset/ResetDtService.php @@ -4,6 +4,7 @@ namespace app\services\reset; use app\models\process\NumberTab; +use app\utils\Logger; use freedom\utils\SocketSession; use think\swoole\Websocket; @@ -27,14 +28,17 @@ class ResetDtService $numberTabInfo = NumberTab::getByTableIdOrderByIdDesc_two($tableInfo); if (!$numberTabInfo){ $ws->emit('resetDt', ['status' => false, 'msg' => 'not_number_tab_data']); + Logger::warn(Logger::CAT_GAME, 'reset_dt_fail', ['table_id' => $tableInfo['id'], 'reason' => 'not_number_tab_data']); return; } if(count($numberTabInfo) != 2){ $ws->emit('resetDt', ['status' => false, 'msg' => '上一铺数据不存在']); + Logger::warn(Logger::CAT_GAME, 'reset_dt_fail', ['table_id' => $tableInfo['id'], 'reason' => 'previous_round_not_found']); return; } if($numberTabInfo[0]['boot_id'] != $numberTabInfo[1]['boot_id']){ $ws->emit('resetDt', ['status' => false, 'msg' => '上一铺不在同一靴']); + Logger::warn(Logger::CAT_GAME, 'reset_dt_fail', ['table_id' => $tableInfo['id'], 'reason' => 'boot_mismatch']); return; } @@ -46,6 +50,7 @@ class ResetDtService $res = NumberTab::resetDt($event,$numberTabInfo,$tableInfo); if (!$res){ $ws->emit('resetDt', ['status' => false, 'msg' => '修改上一局结果失败']); + Logger::warn(Logger::CAT_GAME, 'reset_dt_fail', ['table_id' => $tableInfo['id'], 'number_tab_id' => $numberTabInfo['id'], 'reason' => 'db_update_failed']); return; } @@ -56,5 +61,6 @@ class ResetDtService 'previous_number_tab_id' => $numberTabInfo['id'] ] ]); + Logger::info(Logger::CAT_GAME, 'reset_dt', ['table_id' => $tableInfo['id'], 'opening' => $event['opening']]); } } \ No newline at end of file diff --git a/app/services/waybill/WaybillRemindService.php b/app/services/waybill/WaybillRemindService.php index 5027a4e..52a1b8d 100644 --- a/app/services/waybill/WaybillRemindService.php +++ b/app/services/waybill/WaybillRemindService.php @@ -16,7 +16,7 @@ use app\models\process\WaybillRemind; class WaybillRemindService{ public static function parseWaybillRemind($game_id, $table_id, $table_name, $boot_id){ $is_good = array(); - $ns = NumberTab::getByBootIdDone($boot_id,'result, pair'); + $ns = NumberTab::getByBootIdDone($boot_id,'result,pair,luck_six,dragon_seven,panda_eight'); $bigRoad = array(); //列 $yKey = 0; @@ -99,6 +99,7 @@ class WaybillRemindService{ } } $bigRoad_lenth = count($bigRoadLocation); + try { if($bigRoad_lenth >= 4){ //y=1 if($bigRoadLocation[$bigRoad_lenth-1]['show_y'] == 1){ @@ -530,7 +531,7 @@ class WaybillRemindService{ } }elseif($bigRoadLocation[$bigRoad_lenth-1]['result'] == 2){ if($bigRoadLocation[$bigRoad_lenth-1]['show_y'] < 6){ - $last_banker_lenth = $bigRoadLocation[$bigRoad_lenth-1]['show_y']; + $last_player_lenth = $bigRoadLocation[$bigRoad_lenth-1]['show_y']; } if($bigRoadLocation[$bigRoad_lenth-1]['show_y'] == 6){ for($length=0;$length<99;$length++){ @@ -616,6 +617,9 @@ class WaybillRemindService{ } } } + } catch (\Throwable $e) { + // 路子珠数据不足时跳过 pattern 检测 + } $table = WaybillRemind::where('table_id',$table_id)->find(); $create_time = time(); $bigRoadLocation = json_encode($bigRoadLocation); diff --git a/app/utils/Logger.php b/app/utils/Logger.php new file mode 100644 index 0000000..63a9007 --- /dev/null +++ b/app/utils/Logger.php @@ -0,0 +1,40 @@ + false, // 独立日志级别 - 'apart_level' => [], + 'apart_level' => ['error', 'sql'], // 最大日志文件数量 - 'max_files' => 0, + 'max_files' => 30, // 使用JSON格式记录 'json' => false, // 日志处理 @@ -37,7 +37,7 @@ return [ // 日志输出格式化 'format' => '[%s][%s] %s', // 是否实时写入 - 'realtime_write' => false, + 'realtime_write' => true, ], // 其它日志通道配置 ], diff --git a/config/swoole.php b/config/swoole.php index 498cb86..90cac18 100644 --- a/config/swoole.php +++ b/config/swoole.php @@ -17,6 +17,7 @@ return [ 'reactor_num' => swoole_cpu_num(), 'worker_num' => swoole_cpu_num(), 'task_worker_num' => swoole_cpu_num(), + 'max_request' => 10000, 'enable_static_handler' => true, 'document_root' => root_path('public'), 'package_max_length' => 20 * 1024 * 1024, diff --git a/docs/洗码量计算规则.md b/docs/洗码量计算规则.md new file mode 100644 index 0000000..585458a --- /dev/null +++ b/docs/洗码量计算规则.md @@ -0,0 +1,61 @@ +# 洗码量(码量)计算规则 + +> 客户在 2026-05-28 明确的完整规则,由此重写了开奖结算逻辑。 +> 实现位置:`app/services/opening/OpeningBaccaratService.php`、`OpeningDtService.php` + +## 核心定义 + +**洗码量 = 投注额(按原投注额度计,不乘赔率)** + +系统有两种洗码模式,存于 `cg_user.type_xima`: + +| type_xima | 模式 | 规则 | +|-----------|------|------| +| 1 | 双边洗码 | **所有投注**都计洗码,开和不计 | +| 2 | 单边洗码 | 只有**输口**计洗码,开和不计 | + +> 注意:历史代码里 type_xima 的语义曾被误用为 `1=双边/2=单边`,已确认数据库中 +> 单边洗码会员是 `type_xima=2`。 + +## 百家乐(game_id=1) + +下注位置:庄、闲、和、庄对、闲对、幸运6、大、小 + +**单边洗码(type_xima=2)— 输口计洗码:** +- 庄赢:洗码 = 闲 + 和 + 没中的对子 + 没中的幸运6 + 没中的大小 +- 闲赢:洗码 = 庄 + 和 + 没中的对子 + 没中的幸运6 + 没中的大小 +- 和局:庄闲退回不计,洗码 = 没中的对子 + 没中的幸运6 + 没中的大小 + +**双边洗码(type_xima=1)— 所有投注都计洗码:** +- 庄赢/闲赢:洗码 = 全部投注额(`$amount`) +- 和局:庄闲退回部分不计,其余照常(开和不计核心投注) + +## 龙虎(game_id=2) + +下注位置:龙、虎、和 + +- **和局不杀龙虎**,龙虎全额退回(dt_half 旧逻辑"和局杀一半"已废除) +- 单边洗码:龙赢→洗码=虎+和;虎赢→洗码=龙+和 +- 双边洗码:龙赢/虎赢→洗码=全部投注额;和局→0 +- 赔率:龙/虎 1:0.97,和 1:40 + +## 百家乐赔率补充 +- 庄 1:0.95,闲 1:1,和 1:8 +- 免佣模式(baccarat_type=1):庄赢且非幸运6 时 1:1,幸运6 时 1:0.5 + +## 关键代码模式 + +```php +// 输口判断:开出的结果 != 投注位置 → 该位置投注额计入 ximaliang +if($userInfo['type_xima'] == 1){ + $ximaliang = $amount; // 双边:全部投注 +}else{ + $ximaliang += <各输口投注额>; // 单边:仅输口 +} +// 开和:庄闲退回,ximaliang 不累加这部分 +``` + +## 数据落地 +- 洗码记录写入 `cg_xima` 表,字段 `ximaliang`(原投注额)、`maliang`(=ximaliang×码率)、`net_maliang` +- 开奖时(OpeningXxxService→Bet::openingBet)实时按各级代理当前码率计算并落库 +- **码率/占成在开奖时实时读 DB**,改了码率只影响之后开的局,已开未结的局不变 diff --git a/freedom/.DS_Store b/freedom/.DS_Store deleted file mode 100644 index e1f0acf..0000000 Binary files a/freedom/.DS_Store and /dev/null differ diff --git a/freedom/utils/Waybill.php b/freedom/utils/Waybill.php index 3beb2cb..68086ac 100644 --- a/freedom/utils/Waybill.php +++ b/freedom/utils/Waybill.php @@ -121,7 +121,7 @@ class Waybill $showRoadLocation = array(); foreach($showRoad as $k => $v){ foreach($v as $key => $val){ - $pushData = array('show_x' => $k + 1, 'show_y' =>$key + 1, 'result' => $val['result'], 'pair' => $val['pair']); + $pushData = array('show_x' => $k + 1, 'show_y' =>$key + 1, 'result' => $val['result'], 'pair' => $val['pair'], 'luck_six' => $val['luck_six'] ?? 0, 'dragon_seven' => $val['dragon_seven'] ?? 0, 'panda_eight' => $val['panda_eight'] ?? 0); array_push($showRoadLocation,$pushData); } } diff --git a/log_cleanup.sh b/log_cleanup.sh new file mode 100644 index 0000000..c2df15a --- /dev/null +++ b/log_cleanup.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# OG 日志清理 - 删除30天前的日志文件 +LOG_DIR="/www/wwwroot/Socket/runtime/log" +find "$LOG_DIR" -name "*.log" -type f -mtime +30 -delete 2>/dev/null +find "$LOG_DIR" -type d -empty -delete 2>/dev/null +echo "[$(date)] log cleanup done, current size: $(du -sh $LOG_DIR | cut -f1)" diff --git a/logview.sh b/logview.sh new file mode 100755 index 0000000..3555efa --- /dev/null +++ b/logview.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# OG 日志快速查看工具 +# 用法: ./logview.sh [分类] [选项] +# 分类: frontend | game | connect | bet | error | all +# 选项: -f 实时跟踪 | -t N 查看最后N行 | -g "关键词" 搜索 +# +# 示例: +# ./logview.sh frontend # 查看今天的前端错误 +# ./logview.sh game -f # 实时跟踪游戏事件 +# ./logview.sh game -g "table_id.*12" # 搜索805牛牛台 +# ./logview.sh connect -t 50 # 最近50条连接日志 +# ./logview.sh all -g "WARN\|ERROR" # 所有分类的警告和错误 +# ./logview.sh frontend -d 2026-05-13 # 查看指定日期 + +LOG_DIR="/www/wwwroot/Socket/runtime/log" +DATE=$(date +%Y-%m-%d) +CATEGORY=${1:-all} +shift 2>/dev/null + +MODE="tail" +LINES=30 +GREP="" +CUSTOM_DATE="" + +while [[ $# -gt 0 ]]; do + case $1 in + -f) MODE="follow"; shift ;; + -t) LINES=$2; shift 2 ;; + -g) GREP=$2; shift 2 ;; + -d) CUSTOM_DATE=$2; shift 2 ;; + *) shift ;; + esac +done + +[[ -n "$CUSTOM_DATE" ]] && DATE=$CUSTOM_DATE + +if [[ "$CATEGORY" == "all" ]]; then + CATS="frontend game connect bet error" +else + CATS=$CATEGORY +fi + +for cat in $CATS; do + FILE="$LOG_DIR/$cat/$DATE.log" + if [[ ! -f "$FILE" ]]; then + echo "[$cat] 无日志: $FILE" + continue + fi + + if [[ "$MODE" == "follow" ]]; then + echo "=== 实时跟踪 $cat ===" + tail -f "$FILE" + exit 0 + fi + + echo "=== $cat ($DATE) ===" + if [[ -n "$GREP" ]]; then + grep -i "$GREP" "$FILE" | tail -$LINES + else + tail -$LINES "$FILE" + fi + echo +done diff --git a/public/.user.ini b/public/.user.ini old mode 100644 new mode 100755 index 862df39..e1fac79 --- a/public/.user.ini +++ b/public/.user.ini @@ -1 +1 @@ -open_basedir=/www/wwwroot/tnt-game-socket/:/tmp/ \ No newline at end of file +open_basedir=/www/wwwroot/Socket/:/tmp/ diff --git a/public/info.php b/public/info.php new file mode 100755 index 0000000..ca2751e --- /dev/null +++ b/public/info.php @@ -0,0 +1,7 @@ += 10) return; + if (shouldIgnore(data.message)) return; + data.source = 'handle'; + data.time = new Date().toISOString(); + data.url = location.href; + queue.push(data); + flush(); + } + + function flush() { + if (sending || queue.length === 0) return; + sending = true; + var item = queue.shift(); + var xhr = new XMLHttpRequest(); + xhr.open('POST', reportUrl); + xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.onloadend = function() { sending = false; flush(); }; + xhr.onerror = function() { sending = false; }; + xhr.timeout = 3000; + xhr.send(JSON.stringify(item)); + } + + window.onerror = function(message, source, lineno, colno, error) { + send({ + type: 'error', + message: String(message), + stack: error && error.stack ? error.stack.substring(0, 2000) : '', + file: source, + line: lineno, + col: colno + }); + }; + + window.addEventListener('unhandledrejection', function(event) { + var reason = event.reason; + send({ + type: 'unhandledrejection', + message: reason && reason.message ? reason.message : String(reason), + stack: reason && reason.stack ? reason.stack.substring(0, 2000) : '' + }); + }); +})(); diff --git a/public/static/handle/js/handle.js b/public/static/handle/js/handle.js index 5bc3521..c59158a 100644 --- a/public/static/handle/js/handle.js +++ b/public/static/handle/js/handle.js @@ -51,8 +51,7 @@ var initScanParams = function() { isCardScaned = false; currentPositionToChange = -1; - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); } // NN修改牌 var openAllCardsPanel = function(dom) { @@ -183,7 +182,11 @@ websocket.on('reconnect', (timeout) => { var startBet = function(){ websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var startRob = function(){ @@ -195,7 +198,7 @@ var endRob = function(){ var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -228,7 +231,11 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); $('.control-box .btn-box2 span').removeClass('on'); if(game_id == 1){ websocket.emit('openingBaccarat',{table_id : table_id, number_tab_id : number_tab_id}); @@ -463,8 +470,7 @@ websocket.on('resetNumberTab',function(data){ } // - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); $(".begincard .box").animate({"opacity":"0"},function(){ $(".begincard").fadeOut(); @@ -526,9 +532,21 @@ websocket.on('resetBoot',function(data){ } } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -537,15 +555,10 @@ websocket.on('endBet',function(data){ var doIntervalTime = parseInt(interval_time) + 1; var intervalTime = setInterval(function(){ doIntervalTime--; - $(".countdown .num").html(doIntervalTime) - $(".countdown").css({"opacity":1,"display":"block"}); - $(".countdown .grab-count").addClass("count-active"); - $(".countdown .round-txt-item").addClass("color-red"); + $("#resultAreaTimer").html(doIntervalTime).show(); if(doIntervalTime == 0) { clearInterval(intervalTime); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); - $(".countdown .round-txt-item").removeClass("color-red"); + $("#resultAreaTimer").hide(); if(game_id == 4 || game_id == 5){ $(".banker_result").html(''); $(".player_1_result").html(''); @@ -555,29 +568,26 @@ websocket.on('endBet',function(data){ $('#opening').val(0); $('#result_banker_pair').val(0); $('#result_player_pair').val(0); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); setBetStatus(data.round.number_tab_status); c = parseInt($('#wait_time').val()); } },1000); } else { - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); mp3List = ['stop_2.mp3']; audioMp3(mp3List).Play(); if(game_id == 4 || game_id == 5){ $(".banker_result").html(''); $(".player_1_result").html(''); $(".player_2_result").html(''); - $(".player_3_result").html(''); + $(".player_3_result").html(''); } if(game_id == 6){ $('#toning_result').val(''); $(".toning-result-num").removeClass("active"); } - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); setBetStatus(data.round.number_tab_status); // 识别相关 @@ -595,7 +605,11 @@ websocket.on('endBet',function(data){ }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -717,7 +731,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -740,6 +754,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { opening(); } @@ -753,11 +769,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -784,11 +795,12 @@ $(function(){ var number_tab_status=$("#number_tab_status").val(); if((number_rob_status==1&&number_tab_status==0)||(number_rob_status==2&&number_tab_status==0)){ endRob(); - }else{ + }else if(number_tab_status == 1){ endBet(); } }else{ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } } if(game_id == 6){ @@ -869,7 +881,7 @@ $(function(){ } }) $(window).resize(function(){ - requestData(ludan); + if(ludan) requestData(ludan); }) audio.addEventListener("ended", nextAudio); getTime(); @@ -923,72 +935,30 @@ function loginout(){ }); }; function showPng(opening, pair){ - if(opening == 1 && pair == 0) { - $('#openingPng').attr('src','/static/result_img/banker.png'); - mp3List = ['banker_win.mp3']; - } - if(opening == 1 && pair == 1) { - $('#openingPng').attr('src','/static/result_img/banker_bpair.png'); - mp3List = ['banker_win.mp3','banker_pair.mp3']; - } - if(opening == 1 && pair == 2) { - $('#openingPng').attr('src','/static/result_img/banker_ppair.png'); - mp3List = ['banker_win.mp3','player_pair.mp3']; - } - if(opening == 1 && pair == 3) { - $('#openingPng').attr('src','/static/result_img/banker_bpair_ppair.png'); - mp3List = ['banker_win.mp3','banker_pair.mp3','player_pair.mp3']; - } - if(opening == 2 && pair == 0) { - $('#openingPng').attr('src','/static/result_img/player.png'); - mp3List = ['player_win.mp3']; - - } - if(opening == 2 && pair == 1) { - $('#openingPng').attr('src','/static/result_img/player_bpair.png'); - mp3List = ['player_win.mp3','banker_pair.mp3']; - } - if(opening == 2 && pair == 2) { - $('#openingPng').attr('src','/static/result_img/player_ppair.png'); - mp3List = ['player_win.mp3','player_pair.mp3']; - } - if(opening == 2 && pair == 3) { - $('#openingPng').attr('src','/static/result_img/player_bpair_ppair.png'); - mp3List = ['player_win.mp3','banker_pair.mp3','player_pair.mp3']; - } - if(opening == 3 && pair == 0) { - $('#openingPng').attr('src','/static/result_img/tie.png'); - mp3List = ['tie.mp3']; - } - if(opening == 3 && pair == 1) { - $('#openingPng').attr('src','/static/result_img/tie_bpair.png'); - mp3List = ['tie.mp3','banker_pair.mp3']; - } - if(opening == 3 && pair == 2) { - $('#openingPng').attr('src','/static/result_img/tie_ppair.png'); - mp3List = ['tie.mp3','player_pair.mp3']; - } - if(opening == 3 && pair == 3) { - $('#openingPng').attr('src','/static/result_img/tie_bpair_ppair.png'); - mp3List = ['tie.mp3','banker_pair.mp3','player_pair.mp3']; - } + var winText = '', winColor = '', pairHtml = ''; + var bpLabel = (lang.banker_pair || lang.banker+'对'); + var ppLabel = (lang.player_pair || lang.player+'对'); + if(opening == 1){ winText = lang.banker+'赢'; winColor = '#b20a00'; mp3List = ['banker_win.mp3']; } + if(opening == 2){ winText = lang.player+'赢'; winColor = '#0543bc'; mp3List = ['player_win.mp3']; } + if(opening == 3){ winText = lang.tie; winColor = '#0A5101'; mp3List = ['tie.mp3']; } + if(pair == 1 || pair == 3) { pairHtml += '' + bpLabel + ' '; mp3List.push('banker_pair.mp3'); } + if(pair == 2 || pair == 3) { pairHtml += '' + ppLabel + ''; mp3List.push('player_pair.mp3'); } audioMp3(mp3List).Play(); + var html = '
'+winText+'
'; + if(pairHtml) html += '
'+pairHtml+'
'; + html += '
'; + $("#resultAreaTimer").hide(); + $("#resultAreaImg").html(html); } function showPngDt (opening){ - if(opening == 1) { - $('#openingPng').attr('src','/static/handle/img/dragon_win.png'); - mp3List = ['dragon_win.mp3']; - } - if(opening == 2) { - $('#openingPng').attr('src','/static/handle/img/tiger_win.png'); - mp3List = ['tiger_win.mp3']; - } - if(opening == 3) { - $('#openingPng').attr('src','/static/handle/img/tie.png'); - mp3List = ['tie.mp3']; - } + var winText = '', winColor = ''; + if(opening == 1){ winText = lang.dragon+'赢'; winColor = '#b20a00'; mp3List = ['dragon_win.mp3']; } + if(opening == 2){ winText = lang.tiger+'赢'; winColor = '#0543bc'; mp3List = ['tiger_win.mp3']; } + if(opening == 3){ winText = lang.tie; winColor = '#0A5101'; mp3List = ['tie.mp3']; } audioMp3(mp3List).Play(); + $("#resultAreaTimer").hide(); + $("#resultAreaImg").html('
'+winText+'
'); } function gameResult(data){ @@ -1018,13 +988,8 @@ function gameResult(data){ var src='/static/result_img/'+result_imgsrc+'.png' $(".begincard .player-card .draw .text ").html(lang.player_all+' '+data.round.player+' '+lang.point) $(".begincard .banker-card .draw .text ").html(lang.banker_all+' '+data.round.banker+' '+lang.point); - $('#openingElement').show(); - $('#openingElement').addClass("blink"); isopentime=true; setTimeout(function(){ - - $('#openingElement').removeClass("blink"); - $('#openingElement').hide(); },3000) // 清除状态 card_info=[];///清除牌数据 @@ -1112,9 +1077,8 @@ function getLang(){ } //倒计时 function countDown(time) { - $(".countdown .num").html(time) - $(".countdown").css({"opacity":1,"display":"block"}); - $(".countdown .grab-count").addClass("count-active"); + $("#resultAreaTimer").html(time).show(); + $("#resultAreaImg").empty(); if(time == 10){ mp3List = ['time_tip_10.mp3']; audioMp3(mp3List).Play(); @@ -1126,8 +1090,7 @@ function countDown(time) { if(time<=0){ mp3List = ['stop_2.mp3']; audioMp3(mp3List).Play(); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); return; } } @@ -1567,19 +1530,13 @@ function nextAudio(){ } function countDownRob(time) { var table_id = $('#table_id').val(); - $(".countdown .num").html(time); - $(".countdown").css({"opacity":1,"display":"block"}); - $(".countdown .grab-count").addClass("count-active"); - //$(".countdown").fadeIn(); + $("#resultAreaTimer").html(time).show(); if(time < 5 && time > 0){ mp3List = ['time.mp3']; audioMp3(mp3List).Play(); } if(time<=0){ - // mp3List = ['end_rob.mp3']; - // audioMp3(mp3List).Play(); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); webSocket.send('{"connect":"space","mode":"endRob","number_tab_id":"'+parseInt(number_tab_id)+'","table_id":"'+parseInt(table_id)+'"}'); return; } @@ -1653,6 +1610,9 @@ function waybillFunc(){ data:data, success:function(data){ ludan = data; + if(data && data.waybill && data.waybill.showRoad){ + console.log('[waybill debug] showRoad sample:', JSON.stringify(data.waybill.showRoad.slice(0,3))); + } requestData(ludan); } }); @@ -1937,7 +1897,7 @@ function cutRoad(roadType,ctb,unit,roadData,cols,ask,askroad){ } $.each(new_roadData,function(i,v){ if(roadType=="showWay"){ - SoloPath(ctb,unit,v.show_x-cut,v.show_y,v.result,v.pair) + SoloPath(ctb,unit,v.show_x-cut,v.show_y,v.result,v.pair,v.luck_six||0,v.dragon_seven||0,v.panda_eight||0) } }) } @@ -2002,12 +1962,29 @@ function Font_tie(ctb,num,Font_x,Font_y,fontsize){ ctb.stroke(); } } -function SoloPath(ctb,unit,x,y,type,corners){ +function SoloPath(ctb,unit,x,y,type,corners,luck_six,dragon_seven,panda_eight){ ctb.beginPath(); ctb.lineWidth = 0.5; ctb.strokeStyle = "#000"; var radius=unit/2||0; - if (game_id == 6){ + var cx = radius+unit*(x-1); + var cy = radius+unit*(y-1); + if(game_id==1 && luck_six > 0){ + var color='#8b1a1a'; + var fonts="6"; + ctb.strokeStyle = "#a03030"; + ctb.lineWidth = 2; + } else if(game_id==1 && dragon_seven > 0){ + var color='#b8860b'; + var fonts="7"; + ctb.strokeStyle = "#ff2202"; + ctb.lineWidth = 4; + } else if(game_id==1 && panda_eight > 0){ + var color='#34495e'; + var fonts="8"; + ctb.strokeStyle = "#506878"; + ctb.lineWidth = 2; + } else if (game_id == 6){ if(type==0){ var color='#5A5A5A'; var fonts="0"; diff --git a/public/static/handle/js/handle_b.js b/public/static/handle/js/handle_b.js index 79a1e97..cb71bf7 100644 --- a/public/static/handle/js/handle_b.js +++ b/public/static/handle/js/handle_b.js @@ -34,7 +34,11 @@ websocket.on('reconnect', (timeout) => { var startBet = function(){ websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var startRob = function(){ @@ -46,7 +50,7 @@ var endRob = function(){ var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -79,14 +83,21 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); $('.control-box .btn-box2 span').removeClass('on'); if(game_id == 1){ var opening = $('#opening').val(); var banker_pair = $('#result_banker_pair').val(); var player_pair = $('#result_player_pair').val(); + var luck_six = parseInt($('#lucky_six').val()) || 0; + var dragon_seven = parseInt($('#dragon_seven').val()) || 0; + var panda_eight = parseInt($('#panda_eight').val()) || 0; if(opening > 0){ - websocket.emit('openingBaccarat',{table_id : table_id, number_tab_id : number_tab_id,opening : opening,banker_pair : banker_pair,player_pair:player_pair,luck_six:0}); + websocket.emit('openingBaccarat',{table_id : table_id, number_tab_id : number_tab_id,opening : opening,banker_pair : banker_pair,player_pair:player_pair,luck_six:luck_six,dragon_seven:dragon_seven,panda_eight:panda_eight}); } }else if(game_id == 2){ var opening = $('#opening').val(); @@ -108,7 +119,10 @@ var retreated = function(){ if(game_id == 1){ var opening = result_arr[0]; var pair = result_arr[1]; - websocket.emit('resetBaccarat',{table_id : table_id, number_tab_id : number_tab_id,opening : opening,pair : pair,luck_six:0}); + var luck_six = parseInt(result_arr[2]) || 0; + var dragon_seven = parseInt(result_arr[3]) || 0; + var panda_eight = parseInt(result_arr[4]) || 0; + websocket.emit('resetBaccarat',{table_id : table_id, number_tab_id : number_tab_id,opening : opening,pair : pair,luck_six:luck_six,dragon_seven:dragon_seven,panda_eight:panda_eight}); }else if(game_id == 2){ var opening = result_arr[0]; @@ -199,8 +213,7 @@ websocket.on('resetNumberTab',function(data){ } // - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); $(".begincard .box").animate({"opacity":"0"},function(){ $(".begincard").fadeOut(); @@ -246,9 +259,21 @@ websocket.on('resetBoot',function(data){ layer.msg(lang[data.msg]); } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -257,15 +282,10 @@ websocket.on('endBet',function(data){ var doIntervalTime = parseInt(interval_time) + 1; var intervalTime = setInterval(function(){ doIntervalTime--; - $(".countdown .num").html(doIntervalTime) - $(".countdown").css({"opacity":1,"display":"block"}); - $(".countdown .grab-count").addClass("count-active"); - $(".countdown .round-txt-item").addClass("color-red"); + $("#resultAreaTimer").html(doIntervalTime).show(); if(doIntervalTime == 0) { clearInterval(intervalTime); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); - $(".countdown .round-txt-item").removeClass("color-red"); + $("#resultAreaTimer").hide(); if(game_id == 4 || game_id == 5){ $(".banker_result").html(''); $(".player_1_result").html(''); @@ -275,15 +295,13 @@ websocket.on('endBet',function(data){ $('#opening').val(0); $('#result_banker_pair').val(0); $('#result_player_pair').val(0); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); setBetStatus(data.round.number_tab_status); c = parseInt($('#wait_time').val()); } },1000); } else { - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); mp3List = ['stop_2.mp3']; audioMp3(mp3List).Play(); if(game_id == 4 || game_id == 5){ @@ -296,8 +314,7 @@ websocket.on('endBet',function(data){ $('#toning_result').val(''); $(".toning-result-num").removeClass("active"); } - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); setBetStatus(data.round.number_tab_status); // 识别相关 @@ -315,7 +332,11 @@ websocket.on('endBet',function(data){ }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -384,7 +405,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -407,6 +428,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { opening(); } @@ -420,11 +443,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -452,14 +470,19 @@ $(function(){ } // 停止倒计时 if(e.keyCode == 96){ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } var betStatus = $("#number_tab_status").val(); if(betStatus == 2){ - if(e.keyCode == 105){ + // Numpad 1(97)=庄 Numpad 2(98)=闲 Numpad 3(99)=和 + if(e.keyCode == 97){ $('#opening').val('1'); $('#result_banker_pair').val('0'); $('#result_player_pair').val('0'); + $('#lucky_six').val('0'); + $('#dragon_seven').val('0'); + $('#panda_eight').val('0'); $('#dt_pair').val('0'); $('#openingElement').show(); if(game_id == 1){ @@ -468,10 +491,13 @@ $(function(){ showPngDt(1,0); } } - if(e.keyCode == 103){ + if(e.keyCode == 98){ $('#opening').val('2'); $('#result_banker_pair').val('0'); $('#result_player_pair').val('0'); + $('#lucky_six').val('0'); + $('#dragon_seven').val('0'); + $('#panda_eight').val('0'); $('#dt_pair').val('0'); $('#openingElement').show(); if(game_id == 1){ @@ -480,67 +506,98 @@ $(function(){ showPngDt(2,0) } } - if(e.keyCode == 104){ + if(e.keyCode == 99){ $('#opening').val('3'); $('#result_banker_pair').val('0'); $('#result_player_pair').val('0'); + $('#lucky_six').val('0'); + $('#dragon_seven').val('0'); + $('#panda_eight').val('0'); $('#dt_pair').val('0'); - $('#openingElement').show(); - showPng(3,0,0); - } - if(e.keyCode == 102){ if(game_id == 1){ - var result = $('#opening').val(); - $('#result_banker_pair').val('1'); - $('#result_player_pair').val('0'); - if(result == 1){ - showPng(1,1,0); - } - if(result == 2){ - showPng(2,1,0); - } - if(result == 3){ - showPng(3,1,0); - } + showPng(3,0,0); + }else{ + showPngDt(3,0); } } + // Numpad 6(102)=幸运6(庄赢+标记,切换:2张牌→3张牌→取消) + if(e.keyCode == 102){ + if(game_id == 1){ + var curLs = parseInt($('#lucky_six').val()) || 0; + if(curLs == 0){ curLs = 2; } + else if(curLs == 2){ curLs = 3; } + else { curLs = 0; } + $('#opening').val(curLs > 0 ? '1' : '0'); + $('#result_banker_pair').val('0'); + $('#result_player_pair').val('0'); + $('#lucky_six').val(curLs); + $('#dragon_seven').val('0'); + $('#panda_eight').val('0'); + $('#openingElement').show(); + if(curLs > 0) showPng(1,0,0); + } + } + // Numpad 7(103)=龙7(庄赢+标记) + if(e.keyCode == 103){ + if(game_id == 1){ + $('#opening').val('1'); + $('#result_banker_pair').val('0'); + $('#result_player_pair').val('0'); + $('#lucky_six').val('0'); + $('#dragon_seven').val('1'); + $('#panda_eight').val('0'); + $('#openingElement').show(); + showPng(1,0,0); + } + } + // Numpad 8(104)=熊8(闲赢+标记) + if(e.keyCode == 104){ + if(game_id == 1){ + $('#opening').val('2'); + $('#result_banker_pair').val('0'); + $('#result_player_pair').val('0'); + $('#lucky_six').val('0'); + $('#dragon_seven').val('0'); + $('#panda_eight').val('1'); + $('#openingElement').show(); + showPng(2,0,0); + } + } + // Numpad 4(100)=庄对(可叠加) if(e.keyCode == 100){ if(game_id == 1){ var result = $('#opening').val(); - $('#result_player_pair').val('2'); - $('#result_banker_pair').val('0'); - if(result == 1){ - showPng(1,2,0); - } - if(result == 2){ - showPng(2,2,0); - } - if(result == 3){ - showPng(3,2,0); - } + var bp = $('#result_banker_pair').val(); + bp = (bp == '1') ? '0' : '1'; + $('#result_banker_pair').val(bp); + var pp = $('#result_player_pair').val(); + var pair = 0; + if(bp == '1' && pp == '2') pair = 3; + else if(bp == '1') pair = 1; + else if(pp == '2') pair = 2; + if(result > 0) showPng(parseInt(result),pair,0); } } + // Numpad 5(101)=闲对(可叠加) if(e.keyCode == 101){ if(game_id == 1){ var result = $('#opening').val(); - $('#result_banker_pair').val('1'); - $('#result_player_pair').val('2'); - if(result == 1){ - showPng(1,3,0); - } - if(result == 2){ - showPng(2,3,0); - } - if(result == 3){ - showPng(3,3,0); - } + var pp = $('#result_player_pair').val(); + pp = (pp == '2') ? '0' : '2'; + $('#result_player_pair').val(pp); + var bp = $('#result_banker_pair').val(); + var pair = 0; + if(bp == '1' && pp == '2') pair = 3; + else if(bp == '1') pair = 1; + else if(pp == '2') pair = 2; + if(result > 0) showPng(parseInt(result),pair,0); } } } } }) $(window).resize(function(){ - requestData(ludan); + if(ludan) requestData(ludan); }) audio.addEventListener("ended", nextAudio); getTime(); @@ -594,119 +651,30 @@ function loginout(){ }); }; function showPng(opening, pair,isVoice){ - if(opening == 1 && pair == 0) { - $('#openingPng').attr('src','/static/result_img/3in1/banker.png'); - if(isVoice){ - mp3List = ['banker_win.mp3']; - } - - } - if(opening == 1 && pair == 1) { - $('#openingPng').attr('src','/static/result_img/3in1/banker_bpair.png'); - if(isVoice){ - mp3List = ['banker_win.mp3','banker_pair.mp3']; - } - - } - if(opening == 1 && pair == 2) { - $('#openingPng').attr('src','/static/result_img/3in1/banker_ppair.png'); - if(isVoice){ - mp3List = ['banker_win.mp3','player_pair.mp3']; - } - - } - if(opening == 1 && pair == 3) { - $('#openingPng').attr('src','/static/result_img/3in1/banker_bpair_ppair.png'); - if(isVoice){ - mp3List = ['banker_win.mp3','banker_pair.mp3','player_pair.mp3']; - } - - } - if(opening == 2 && pair == 0) { - $('#openingPng').attr('src','/static/result_img/3in1/player.png'); - if(isVoice){ - mp3List = ['player_win.mp3']; - } - - - } - if(opening == 2 && pair == 1) { - $('#openingPng').attr('src','/static/result_img/3in1/player_bpair.png'); - if(isVoice){ - mp3List = ['player_win.mp3','banker_pair.mp3']; - } - - } - if(opening == 2 && pair == 2) { - $('#openingPng').attr('src','/static/result_img/3in1/player_ppair.png'); - if(isVoice){ - mp3List = ['player_win.mp3','player_pair.mp3']; - } - - } - if(opening == 2 && pair == 3) { - $('#openingPng').attr('src','/static/result_img/3in1/player_bpair_ppair.png'); - if(isVoice){ - mp3List = ['player_win.mp3','banker_pair.mp3','player_pair.mp3']; - } - - } - if(opening == 3 && pair == 0) { - $('#openingPng').attr('src','/static/result_img/3in1/tie.png'); - if(isVoice){ - mp3List = ['tie.mp3']; - } - - } - if(opening == 3 && pair == 1) { - $('#openingPng').attr('src','/static/result_img/3in1/tie_bpair.png'); - if(isVoice){ - mp3List = ['tie.mp3','banker_pair.mp3']; - } - - } - if(opening == 3 && pair == 2) { - $('#openingPng').attr('src','/static/result_img/3in1/tie_ppair.png'); - if(isVoice){ - mp3List = ['tie.mp3','player_pair.mp3']; - } - - } - if(opening == 3 && pair == 3) { - $('#openingPng').attr('src','/static/result_img/3in1/tie_bpair_ppair.png'); - if(isVoice){ - mp3List = ['tie.mp3','banker_pair.mp3','player_pair.mp3']; - } - - } - if(isVoice){ - audioMp3(mp3List).Play(); - } - + var winText = '', winColor = '', pairHtml = ''; + var bpLabel = (lang.banker_pair || lang.banker+'对'); + var ppLabel = (lang.player_pair || lang.player+'对'); + if(opening == 1){ winText = lang.banker+'赢'; winColor = '#b20a00'; mp3List = ['banker_win.mp3']; } + if(opening == 2){ winText = lang.player+'赢'; winColor = '#0543bc'; mp3List = ['player_win.mp3']; } + if(opening == 3){ winText = lang.tie; winColor = '#0A5101'; mp3List = ['tie.mp3']; } + if(pair == 1 || pair == 3) { pairHtml += '' + bpLabel + ' '; if(isVoice) mp3List.push('banker_pair.mp3'); } + if(pair == 2 || pair == 3) { pairHtml += '' + ppLabel + ''; if(isVoice) mp3List.push('player_pair.mp3'); } + if(isVoice){ audioMp3(mp3List).Play(); } + var html = '
'+winText+'
'; + if(pairHtml) html += '
'+pairHtml+'
'; + html += '
'; + $("#resultAreaTimer").hide(); + $("#resultAreaImg").html(html); } function showPngDt (opening,isVoice){ - if(opening == 1) { - $('#openingPng').attr('src','/static/result_img/3in1/drogon.png'); - if(isVoice){ - mp3List = ['dragon_win.mp3']; - } - } - if(opening == 2) { - $('#openingPng').attr('src','/static/result_img/3in1/tiger.png'); - if(isVoice){ - mp3List = ['tiger_win.mp3']; - } - } - if(opening == 3) { - $('#openingPng').attr('src','/static/handle/result_img/3in1/tie.png'); - if(isVoice){ - mp3List = ['tie.mp3']; - } - } - if(isVoice){ - audioMp3(mp3List).Play(); - } + var winText = '', winColor = ''; + if(opening == 1){ winText = (lang.dragon||'龙')+'赢'; winColor = '#b20a00'; mp3List = ['dragon_win.mp3']; } + if(opening == 2){ winText = (lang.tiger||'虎')+'赢'; winColor = '#0543bc'; mp3List = ['tiger_win.mp3']; } + if(opening == 3){ winText = lang.tie||'和'; winColor = '#0A5101'; mp3List = ['tie.mp3']; } + if(isVoice){ audioMp3(mp3List).Play(); } + $("#resultAreaTimer").hide(); + $("#resultAreaImg").html('
'+winText+'
'); } function gameResult(data){ @@ -764,9 +732,8 @@ function getLang(){ } //倒计时 function countDown(time) { - $(".countdown .num").html(time) - $(".countdown").css({"opacity":1,"display":"block"}); - $(".countdown .grab-count").addClass("count-active"); + $("#resultAreaTimer").html(time).show(); + $("#resultAreaImg").empty(); if(time == 10){ mp3List = ['time_tip_10.mp3']; audioMp3(mp3List).Play(); @@ -778,8 +745,7 @@ function countDown(time) { if(time<=0){ mp3List = ['stop_2.mp3']; audioMp3(mp3List).Play(); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); return; } } @@ -1170,19 +1136,13 @@ function nextAudio(){ } function countDownRob(time) { var table_id = $('#table_id').val(); - $(".countdown .num").html(time); - $(".countdown").css({"opacity":1,"display":"block"}); - $(".countdown .grab-count").addClass("count-active"); - //$(".countdown").fadeIn(); + $("#resultAreaTimer").html(time).show(); if(time < 5 && time > 0){ mp3List = ['time.mp3']; audioMp3(mp3List).Play(); } if(time<=0){ - // mp3List = ['end_rob.mp3']; - // audioMp3(mp3List).Play(); - $(".countdown").css({"opacity":0,"display":"none"}); - $(".countdown .grab-count").removeClass("count-active"); + $("#resultAreaTimer").hide(); webSocket.send('{"connect":"space","mode":"endRob","number_tab_id":"'+parseInt(number_tab_id)+'","table_id":"'+parseInt(table_id)+'"}'); return; } @@ -1400,7 +1360,7 @@ function cutRoad(roadType,ctb,unit,roadData,cols,ask,askroad){ }else if(roadType=="bigeyeWay"){ BigeyePath(ctb,unit,v.show_x-cut,v.show_y,v.result) }else if(roadType=="showWay"){ - SoloPath(ctb,unit,v.show_x-cut,v.show_y,v.result,v.pair,v.lucky_six) + SoloPath(ctb,unit,v.show_x-cut,v.show_y,v.result,v.pair,v.luck_six||0,v.dragon_seven||0,v.panda_eight||0) }else if(roadType=="bigWay"){ BigPath(ctb,unit,v.show_x-cut,v.show_y,v.result,v.tie_num,v.pair) }else if(roadType=="sanxingWay"){ @@ -1420,21 +1380,29 @@ function Font_tie(ctb,num,Font_x,Font_y,fontsize){ ctb.stroke(); } } -function SoloPath(ctb,unit,x,y,type,corners,luckySix){ +function SoloPath(ctb,unit,x,y,type,corners,luck_six,dragon_seven,panda_eight){ ctb.beginPath(); ctb.lineWidth = 0.5; ctb.strokeStyle = "#000"; var radius=unit/2||0; - if(type==1){ + if(game_id==1 && luck_six > 0){ + var color='#8b1a1a', fonts="6"; + ctb.strokeStyle = "#a03030"; + ctb.lineWidth = 2; + }else if(game_id==1 && dragon_seven > 0){ + var color='#b8860b', fonts="7"; + ctb.strokeStyle = "#ff2202"; + ctb.lineWidth = 4; + }else if(game_id==1 && panda_eight > 0){ + var color='#34495e', fonts="8"; + ctb.strokeStyle = "#506878"; + ctb.lineWidth = 2; + }else if(type==1){ var color='#b20a00'; if(game_id == 2){ var fonts = lang.dragon; }else{ - if(luckySix == 1){ - var fonts = 6; - }else{ - var fonts = lang.banker; - } + var fonts = lang.banker; } ctb.strokeStyle = "#ff4a68"; }else if(type==2){ diff --git a/public/static/handle/js/handle_b_sb.js b/public/static/handle/js/handle_b_sb.js index 1dd7fa7..b4acc2c 100644 --- a/public/static/handle/js/handle_b_sb.js +++ b/public/static/handle/js/handle_b_sb.js @@ -137,7 +137,11 @@ var startBet = function(){ sbSocket.emit("stop",{"tableCode":casinoTableId, "type":"SYS"}); websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var startRob = function(){ @@ -160,7 +164,7 @@ var stopSB = function(){ var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -193,7 +197,11 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); $('.control-box .btn-box2 span').removeClass('on'); if(game_id == 1){ websocket.emit('openingBaccarat',{table_id : table_id, number_tab_id : number_tab_id}); @@ -496,9 +504,21 @@ websocket.on('resetBoot',function(data){ } } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -538,7 +558,11 @@ websocket.on('endBet',function(data){ }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -805,7 +829,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -828,6 +852,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { opening(); } @@ -841,11 +867,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -872,11 +893,12 @@ $(function(){ var number_tab_status=$("#number_tab_status").val(); if((number_rob_status==1&&number_tab_status==0)||(number_rob_status==2&&number_tab_status==0)){ endRob(); - }else{ + }else if(number_tab_status == 1){ endBet(); } }else{ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } } if(game_id == 6){ @@ -2031,7 +2053,7 @@ function cutRoad(roadType,ctb,unit,roadData,cols,ask,askroad){ } $.each(new_roadData,function(i,v){ if(roadType=="showWay"){ - SoloPath(ctb,unit,v.show_x-cut,v.show_y,v.result,v.pair) + SoloPath(ctb,unit,v.show_x-cut,v.show_y,v.result,v.pair,v.luck_six||0,v.dragon_seven||0,v.panda_eight||0) } }) } @@ -2096,11 +2118,13 @@ function Font_tie(ctb,num,Font_x,Font_y,fontsize){ ctb.stroke(); } } -function SoloPath(ctb,unit,x,y,type,corners){ +function SoloPath(ctb,unit,x,y,type,corners,luck_six,dragon_seven,panda_eight){ ctb.beginPath(); ctb.lineWidth = 0.5; ctb.strokeStyle = "#000"; var radius=unit/2||0; + var cx = radius+unit*(x-1); + var cy = radius+unit*(y-1); if (game_id == 6){ if(type==0){ var color='#5A5A5A'; @@ -2123,6 +2147,21 @@ function SoloPath(ctb,unit,x,y,type,corners){ var fonts="4"; ctb.strokeStyle = "#E35C4C"; } + } else if(game_id==1 && luck_six > 0){ + var color='#8b1a1a'; + var fonts="6"; + ctb.strokeStyle = "#a03030"; + ctb.lineWidth = 2; + } else if(game_id==1 && dragon_seven > 0){ + var color='#b8860b'; + var fonts="7"; + ctb.{strokeStyle = "#ff2202";} + ctb.lineWidth = 3; + } else if(game_id==1 && panda_eight > 0){ + var color='#34495e'; + var fonts="8"; + ctb.strokeStyle = "#506878"; + ctb.lineWidth = 2; } else { if(type==1){ var color='#ff002a'; @@ -2145,14 +2184,14 @@ function SoloPath(ctb,unit,x,y,type,corners){ } } - ctb.arc(radius+unit*(x-1), radius+unit*(y-1), unit*0.45, 0, Math.PI * 2); + ctb.arc(cx, cy, unit*0.45, 0, Math.PI * 2); ctb.fillStyle=color; ctb.fill(); ctb.font=unit*0.6+"px Arial"; - ctb.fillStyle ="#fff" ; // 颜色 + ctb.fillStyle ="#fff" ; ctb.textAlign = 'center'; ctb.textBaseline = 'middle'; - ctb.fillText(fonts,radius+unit*(x-1),radius+unit*(y-1)); + ctb.fillText(fonts,cx,cy); ctb.stroke(); var corner_xy=unit/3.5 if(corners==1){ diff --git a/public/static/handle/js/handle_b_sb_scan_four.js b/public/static/handle/js/handle_b_sb_scan_four.js index 3992dc4..8458067 100644 --- a/public/static/handle/js/handle_b_sb_scan_four.js +++ b/public/static/handle/js/handle_b_sb_scan_four.js @@ -137,7 +137,11 @@ var startBet = function(){ sbSocket.emit("stop",{"tableCode":casinoTableId, "type":"SYS"}); websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var startRob = function(){ @@ -161,7 +165,7 @@ var stopSB = function(){ var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -194,7 +198,11 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); $('.control-box .btn-box2 span').removeClass('on'); if(game_id == 1){ websocket.emit('openingBaccarat',{table_id : table_id, number_tab_id : number_tab_id}); @@ -512,9 +520,21 @@ websocket.on('resetBoot',function(data){ } } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -555,7 +575,11 @@ websocket.on('endBet',function(data){ }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -932,7 +956,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -955,6 +979,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { opening(); } @@ -968,11 +994,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -999,11 +1020,12 @@ $(function(){ var number_tab_status=$("#number_tab_status").val(); if((number_rob_status==1&&number_tab_status==0)||(number_rob_status==2&&number_tab_status==0)){ endRob(); - }else{ + }else if(number_tab_status == 1){ endBet(); } }else{ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } } if(game_id == 6){ diff --git a/public/static/handle/js/handle_dice.js b/public/static/handle/js/handle_dice.js index 8d3efea..942d6ba 100644 --- a/public/static/handle/js/handle_dice.js +++ b/public/static/handle/js/handle_dice.js @@ -28,13 +28,17 @@ websocket.on('reconnect', (timeout) => { var startBet = function(){ websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -71,7 +75,11 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); $('.control-box .btn-box2 span').removeClass('on'); let result = $('#dice_result').val(); websocket.emit('openingDice',{table_id : table_id, number_tab_id : number_tab_id, result : result}); @@ -189,9 +197,21 @@ websocket.on('resetBoot',function(data){ } } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -211,7 +231,11 @@ websocket.on('endBet',function(data){ setBetStatus(data.round.number_tab_status); }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -241,7 +265,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -264,6 +288,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { opening(); } @@ -277,11 +303,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -308,11 +329,12 @@ $(function(){ var number_tab_status=$("#number_tab_status").val(); if((number_rob_status==1&&number_tab_status==0)||(number_rob_status==2&&number_tab_status==0)){ endRob(); - }else{ + }else if(number_tab_status == 1){ endBet(); } }else{ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } } // 骰宝结果选择 diff --git a/public/static/handle/js/handle_dt_sb.js b/public/static/handle/js/handle_dt_sb.js index 835e164..e741375 100644 --- a/public/static/handle/js/handle_dt_sb.js +++ b/public/static/handle/js/handle_dt_sb.js @@ -123,7 +123,11 @@ var startBet = function(){ sbSocket.emit("stop",{"tableCode":casinoTableId, "type":"SYS"}); websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var startRob = function(){ @@ -146,7 +150,7 @@ var stopSB = function(){ var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -179,7 +183,11 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); $('.control-box .btn-box2 span').removeClass('on'); if(game_id == 1){ websocket.emit('openingBaccarat',{table_id : table_id, number_tab_id : number_tab_id}); @@ -487,9 +495,21 @@ websocket.on('resetBoot',function(data){ } } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -527,7 +547,11 @@ websocket.on('endBet',function(data){ }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -774,7 +798,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -797,6 +821,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { opening(); } @@ -810,11 +836,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -841,11 +862,12 @@ $(function(){ var number_tab_status=$("#number_tab_status").val(); if((number_rob_status==1&&number_tab_status==0)||(number_rob_status==2&&number_tab_status==0)){ endRob(); - }else{ + }else if(number_tab_status == 1){ endBet(); } }else{ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } } if(game_id == 6){ diff --git a/public/static/handle/js/handle_nn_sb.js b/public/static/handle/js/handle_nn_sb.js index 774c7fc..8ca0818 100644 --- a/public/static/handle/js/handle_nn_sb.js +++ b/public/static/handle/js/handle_nn_sb.js @@ -184,7 +184,11 @@ var startBet = function(){ sbSocket.emit("stop",{"tableCode":casinoTableId, "type":"SYS"}); websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var startRob = function(){ @@ -207,7 +211,7 @@ var stopSB = function(){ var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -240,7 +244,11 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); $('.control-box .btn-box2 span').removeClass('on'); if(game_id == 1){ websocket.emit('openingBaccarat',{table_id : table_id, number_tab_id : number_tab_id}); @@ -557,9 +565,21 @@ websocket.on('resetBoot',function(data){ } } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -602,7 +622,11 @@ websocket.on('endBet',function(data){ }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -908,7 +932,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -931,6 +955,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { opening(); } @@ -944,11 +970,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -975,11 +996,12 @@ $(function(){ var number_tab_status=$("#number_tab_status").val(); if((number_rob_status==1&&number_tab_status==0)||(number_rob_status==2&&number_tab_status==0)){ endRob(); - }else{ + }else if(number_tab_status == 1){ endBet(); } }else{ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } } if(game_id == 6){ diff --git a/public/static/handle/js/handle_roulette.js b/public/static/handle/js/handle_roulette.js index f3fff6e..f77c656 100644 --- a/public/static/handle/js/handle_roulette.js +++ b/public/static/handle/js/handle_roulette.js @@ -28,13 +28,17 @@ websocket.on('reconnect', (timeout) => { var startBet = function(){ websocket.emit('startBet',{table_id : table_id, number_tab_id : number_tab_id}); }; +var isEndingBet = false; var endBet = function (){ + if(isEndingBet) return; + isEndingBet = true; + setTimeout(function(){ isEndingBet = false; }, 2000); websocket.emit('endBet',{table_id : table_id, number_tab_id : number_tab_id}); }; var resetNumberTab = function(){ isCBoot = true; var betStatus = $("#number_tab_status").val(); - if(betStatus == 1 || betStatus == 2){ + if(betStatus == 1 || betStatus == 2 || betStatus == 3){ layer.confirm(lang.is_reset_number,{btn: [lang.confirm,lang.cancel],title:lang.message}, function(index){ websocket.emit('resetNumberTab',{table_id : table_id}); isCBoot = false; @@ -69,7 +73,11 @@ var resetBoot = function(){ layer.close(index); }); }; +var isOpening = false; var opening = function(){ + if(isOpening) return; + isOpening = true; + setTimeout(function(){ isOpening = false; }, 3000); let result = $('#roulette_result').val(); websocket.emit('openingRoulette',{table_id : table_id, number_tab_id : number_tab_id, result : result}); }; @@ -169,9 +177,21 @@ websocket.on('resetBoot',function(data){ } } }); +var _cdTimer = null; +var _cdVal = 0; websocket.on('startBetCountDown',function(data){ if(data.status == true && data.table_id == table_id){ + _cdVal = data.count_down; countDown(data.count_down); + if(_cdTimer) clearTimeout(_cdTimer); + if(_cdVal > 0){ + _cdTimer = setTimeout(function _tick(){ + _cdVal--; + if(_cdVal >= 0) countDown(_cdVal); + if(_cdVal > 0) _cdTimer = setTimeout(_tick, 1000); + else _cdTimer = null; + }, 2000); + } } }); websocket.on('endBet',function(data){ @@ -185,7 +205,11 @@ websocket.on('endBet',function(data){ setBetStatus(data.round.number_tab_status); }else{ if (data.table_id != undefined && data.table_id == table_id) { - layer.msg(lang[data.msg]); + if(data.msg == 'end_bet_error' && data.bet_status != undefined){ + $('#number_tab_status').val(data.bet_status); + } else { + layer.msg(lang[data.msg]); + } } } }); @@ -216,7 +240,7 @@ $(function(){ if(!cookieValue){ $.cookie("enter_time", 1, { expires: 1/86400*3 }); }else{ - layer.msg('Please hold on'); + layer.msg('请稍等'); return false } @@ -239,6 +263,8 @@ $(function(){ }else{ layer.msg("请稍等!"); } + }else if (numberTabStatus == 1) { + endBet(); }else if (numberTabStatus == 2) { var result = $('#roulette_result').val(); if(result.length == 0){ @@ -256,11 +282,6 @@ $(function(){ if(e.keyCode == 109){ $('#update_ludan').toggle(); } - //换靴 - if(e.keyCode == 107){ - changeBoot(); - $('#keycode').val(''); - } //退出登录 if(e.keyCode == 106){ if(table_type == 1){ @@ -287,11 +308,12 @@ $(function(){ var number_tab_status=$("#number_tab_status").val(); if((number_rob_status==1&&number_tab_status==0)||(number_rob_status==2&&number_tab_status==0)){ endRob(); - }else{ + }else if(number_tab_status == 1){ endBet(); } }else{ - endBet(); + var _s = $("#number_tab_status").val(); + if(_s == 1) endBet(); } } // 骰宝结果选择