$mysql_conf['host'], 'port' => $mysql_conf['port'], 'user' => $mysql_conf['user'], 'passwd' => $mysql_conf['passwd'], 'dbname' => 'gamedb2004_' . $mysql_conf['instance_id'] )); return $conn; } protected function getSign($sign_id) { $g_conf_sign_cluster = require('../res/signDaily@signDaily.php'); $sign_conf = getSignConfig($g_conf_sign_cluster, $sign_id); $s = array( 'sign_id' => $sign_conf['sign_id'], 'condition' => $sign_conf['condition'], 'item_id' => $sign_conf['item_id'], 'num' => $sign_conf['num'], ); return $s; } protected function getExplode($string) { $delim = "|"; $drop_multiply = explode($delim, $string); $delim1 = ":"; $arr = array(); for ($i = 0; $i < count($drop_multiply); $i++) { $mul = explode($delim1, $drop_multiply[$i]); array_push($arr, $mul); } return $arr; } protected function getSeason($season_id) { $season_meta_table = require('../res/season@season.php'); $season_meta = getSeasonConfig($season_meta_table, $season_id); $season = array( 'number' => $season_meta['season_number'], 'open_time' => $season_meta['time1'], 'end_time' => $season_meta['time2'], ); return $season; } protected function getParameter($para_id) { $g_conf_para_cluster = require('../res/parameter@parameter.php'); $para_conf = getParameterConfig($g_conf_para_cluster, $para_id); $p = array( 'id' => $para_conf['id'], 'param_name' => $para_conf['param_name'], 'param_value' => $para_conf['param_value'], ); return $p; } protected function insertSign($account_id, $sign_days) { $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } $ret = $conn->execScript('INSERT INTO sign(accountid, sign_id, signable, sign_time, create_time, modify_time) ' . ' VALUES(:accountid, :sign_id, 0, :sign_time, :create_time, :modify_time) ' . ' ON DUPLICATE KEY UPDATE accountid=:accountid, sign_id=:sign_id, signable=0, sign_time=:sign_time, modify_time=:modify_time;', array( ':accountid' => $account_id, ':sign_id' => $sign_days, ':sign_time' => time(), ':create_time' => time(), ':modify_time' => time() )); if (!$ret) { die(); } } public function signInfo() { $account_id = $_REQUEST['account_id']; //登录校验 $login = loginVerify($account_id, $_REQUEST['session_id']); if (!$login) { phpcommon\sendError(ERR_USER_BASE + 1, 'session无效'); return; } $conn = $this->getMysql($account_id); $last_sign_id = 0; if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } $rows = $conn->execQuery('SELECT sign_id, sign_time FROM sign WHERE accountid=:accountid;', array( ':accountid' => $account_id )); $nowTime = phpcommon\getdayseconds(time()); if (!$rows) { $last_sign_id = 1; //插入签到列表 $this->insertSign($account_id, $last_sign_id); //更新签到总天数 $this->updateSignSum($account_id, $last_sign_id); //完成签到任务 $quest = new classes\Quest(); $quest->triggerQuest(QUEST_DAY_LOGIN, 1, 1, $account_id); $quest->triggerQuest(QUEST_SUM_LOGIN, 2, 1, $account_id); } else { $last_sign_time = 0; foreach ($rows as $row) { if ($row['sign_id'] > $last_sign_id) { $last_sign_time = $row['sign_time']; $last_sign_id = $row['sign_id']; } } if ($nowTime - phpcommon\getdayseconds($last_sign_time) > 0) { //每日刷新 $this->updateDaily($account_id); $this->updateSeasonStatus($account_id); $passed_days = floor(($nowTime - phpcommon\getdayseconds($last_sign_time)) / (3600 * 24)); if ($passed_days > 7 - $last_sign_id) { //跨周时删除老数据 $num = 0; $sum = 0; $ret = $conn->execScript('DELETE from sign WHERE accountid=:accountid;', array( ':accountid' => $account_id, )); if (!$ret) { die(); return; } if ($passed_days > 7) { $num = ($passed_days + $last_sign_id) % 7; } else { $num = $last_sign_id + $passed_days - 7; } if ($num == 0) { $sum = 7; } else { $sum = $num; } for ($i = 1; $i < $sum + 1; $i++) { //插入补签列表 $this->insertSign($account_id, $i); } } else { for ($i = $last_sign_id + 1; $i < $passed_days + $last_sign_id + 1; $i++) { //插入补签列表 $this->insertSign($account_id, $i); } } //更新签到总天数 $this->updateSignSum($account_id, $passed_days); //完成签到任务 $quest = new classes\Quest(); $quest->triggerQuest(QUEST_DAY_LOGIN, 1, 1, $account_id); $quest->triggerQuest(QUEST_SUM_LOGIN, 2, 1, $account_id); } } $sign_list = array(); $rows = $conn->execQuery('SELECT sign_id, signable FROM sign WHERE accountid=:accountid;', array( ':accountid' => $account_id )); foreach ($rows as $row) { array_push($sign_list, array( 'sign_id' => $row['sign_id'], 'signable' => $row['signable'] )); } $rowUser = $conn->execQueryOne('SELECT sign_sum FROM user WHERE accountid=:accountid;', array( ':accountid' => $account_id )); //判断当前第几周 $item_list = array(); $week = ceil($rowUser['sign_sum'] / 7); $dayid = ($week - 1) * 7; //如果大于配置表最后一周,按最后一周奖励 $g_conf_sign_cluster = require('../res/signDaily@signDaily.php'); if ($dayid > count($g_conf_sign_cluster)) { $dayid = count($g_conf_sign_cluster) - 7; } for ($day = $dayid + 1; $day <= $dayid + 7; $day++) { $s = $this->getSign($day + 90000); array_push($item_list, array( 'item_id' => $s['item_id'], 'item_num' => $s['num'], )); } echo json_encode(array( 'errcode' => 0, 'errmsg' => '', 'sign_days' => $rowUser['sign_sum'], 'sign_list' => $sign_list, 'item_list' => $item_list )); } public function signReward() { $account_id = $_REQUEST['account_id']; //登录校验 $login = loginVerify($account_id, $_REQUEST['session_id']); if (!$login) { phpcommon\sendError(ERR_USER_BASE + 1, 'session无效'); return; } $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } $row = $conn->execQueryOne('SELECT signable FROM sign WHERE accountid=:accountid AND sign_id=:sign_id;', array( ':accountid' => $account_id, ':sign_id' => $_REQUEST['sign_id'], )); if (!$row || $row['signable'] == 1) { phpcommon\sendError(ERR_USER_BASE + 2, '已签到'); return; } $ret = $conn->execScript('UPDATE sign SET sign_time=:sign_time, signable=1, modify_time=:modify_time ' . ' WHERE accountid=:accountid AND sign_id=:sign_id;', array( ':accountid' => $account_id, ':sign_id' => $_REQUEST['sign_id'], ':sign_time' => time(), ':modify_time' => time() )); if (!$ret) { die(); return; } $rowUser = $conn->execQueryOne('SELECT sign_sum FROM user WHERE accountid=:accountid;', array( ':accountid' => $account_id )); //获得奖励 //判断当前第几周 $item_list = array(); $week = ceil($rowUser['sign_sum'] / 7); $dayid = ($week - 1) * 7 + $_REQUEST['sign_id']; //如果大于配置表最后一周,按最后一周奖励 $g_conf_sign_cluster = require('../res/signDaily@signDaily.php'); if ($dayid > count($g_conf_sign_cluster)) { $dayid = count($g_conf_sign_cluster) - 7; } $s = $this->getSign($dayid + 90000); $item_id = $s['item_id']; $num = $s['num']; array_push($item_list, array( 'item_id' => $s['item_id'], 'item_num' => $s['num'], )); $addreward = new classes\AddReward(); $addreward->addReward($item_id, $num, $account_id); $coin_num = $addreward->getCoinNum($account_id); $diamond_num = $addreward->getDiamondNum($account_id); echo json_encode(array( 'errcode' => 0, 'errmsg' => '', 'item_list' => $item_list, 'coin_nums' => $coin_num, 'diamond_nums' => $diamond_num )); } public function signDoubleReward() { $account_id = $_REQUEST['account_id']; //登录校验 $login = loginVerify($account_id, $_REQUEST['session_id']); if (!$login) { phpcommon\sendError(ERR_USER_BASE + 1, 'session无效'); return; } $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } $rowUser = $conn->execQueryOne('SELECT sign_sum FROM user WHERE accountid=:accountid;', array( ':accountid' => $account_id )); //获得奖励 //判断当前第几周 $item_list = array(); $week = ceil($rowUser['sign_sum'] / 7); $dayid = ($week - 1) * 7 + $_REQUEST['sign_id']; //如果大于配置表最后一周,按最后一周奖励 $g_conf_sign_cluster = require('../res/signDaily@signDaily.php'); if ($dayid > count($g_conf_sign_cluster)) { $dayid = count($g_conf_sign_cluster) - 7; } $s = $this->getSign($dayid + 90000); $item_id = $s['item_id']; $num = $s['num']; $p = $this->getParameter(REWARD_TIMES); $times = $p['param_value'] - 1; $num = $num * $times; $addreward = new classes\AddReward(); $addreward->addReward($item_id, $num, $account_id); echo json_encode(array( 'errcode' => 0, 'errmsg' => '', )); } protected function updateSignSum($account_id, $sign_num) { $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } $row = $conn->execQueryOne('SELECT sign_sum FROM user WHERE accountid=:accountid;', array( ':accountid' => $account_id )); $ret = $conn->execScript('UPDATE user SET sign_sum=:sign_sum, modify_time=:modify_time ' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':sign_sum' => $row['sign_sum'] + $sign_num, ':modify_time' => time() )); if (!$ret) { die(); } } protected function updateDaily($account_id) { $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } //刷新每日任务和活动任务 $rowCount = $conn->execQueryRowCount('SELECT * FROM quest WHERE accountid=:accountid;', array( ':accountid' => $account_id, )); if ($rowCount != 0) { for ($i = 0; $i < $rowCount; $i++) { $ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, quest_num=:quest_num, modify_time=:modify_time ' . ' WHERE accountid=:accountid AND quest_type=:quest_type1;', array( ':accountid' => $account_id, ':quest_num' => 0, ':quest_type1' => 1, ':quest_state' => 0, ':modify_time' => time() )); } if (!$ret) { die(); } } //刷新战斗结算奖励次数,商店刷新次数,客服, 每日免费金币钻石 $battle_ret = $conn->execScript('UPDATE user SET battle_re_times=0, diamond_shop_flush_times=0, shop_flush_times=0, kefu_status=0, free_coin=0, free_diamond=0, modify_time=:modify_time, free_box=0 ' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':modify_time' => time() )); if (!$battle_ret) { die(); } //刷新抽奖活动奖励 $lottery_ret = $conn->execScript('UPDATE activity SET free_times=0, video_times=0, modify_time=:modify_time ' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':modify_time' => time() )); if (!$lottery_ret) { die(); } //刷新邀请好友奖励 $share_ret = $conn->execScript('UPDATE share_achievement SET status=0, modify_time=:modify_time ' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':modify_time' => time() )); if (!$share_ret) { die(); } //刷新vip每日奖励 $share_ret = $conn->execScript('UPDATE vipinfo SET today_reward_status=0, modify_time=:modify_time ' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':modify_time' => time() )); if (!$share_ret) { die(); } } protected function updateSeasonStatus($account_id) { $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } //刷新赛季奖励状态 $rowUser = $conn->execQueryOne('SELECT season_time, pass_status, integral ' . ' FROM user WHERE accountid=:accountid;', array( ':accountid' => $account_id, )); if (time() > $rowUser['season_time'] && $rowUser['season_time'] != 0) { $user_ret = $conn->execScript('UPDATE user SET pass_status=0, score=0, season_status=0, integral=0, season_end_score=:season_end_score, modify_time=:modify_time ' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':season_end_score' => $rowUser['integral'], ':modify_time' => time() )); if (!$user_ret) { die(); } $pass_ret = $conn->execScript('UPDATE passinfo SET active_status=0, honor_status=0, modify_time=:modify_time ' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':modify_time' => time() )); if (!$pass_ret) { die(); } } } } ?>