accountId = $_REQUEST['account_id']; $this->sessionId = $_REQUEST['session_id']; if ($_REQUEST['c'] == 'Role' && $_REQUEST['a'] == 'battleReport') { return; } if (!phpcommon\isValidSessionId($this->accountId, $this->sessionId)) { phpcommon\sendError(500, '无效的session_id'); die(); } } protected function getAccountId() { return $this->accountId; } protected function getChannel() { return phpcommon\extractChannel($this->getAccountId()); } protected function getSessionId() { return $this->sessionId; } protected function getRegisterTime() { $registertime = phpcommon\extractRegisterTimeFromSessionId($this->sessionId); return $registertime; } protected function getMysql($data) { $mysql_conf = getMysqlConfig(crc32($data)); //error_log("Sql01=====".json_encode($mysql_conf)."==".DBNAME_PREFIX . $mysql_conf['instance_id']); $conn = new phpcommon\Mysql(array( 'host' => $mysql_conf['host'], 'port' => $mysql_conf['port'], 'user' => $mysql_conf['user'], 'passwd' => $mysql_conf['passwd'], 'dbname' => DBNAME_PREFIX . $mysql_conf['instance_id'] )); return $conn; } protected function getSelfMysql() { if (!$this->mysqlConn) { $this->mysqlConn = $this->getMysql($this->getAccountId()); } return $this->mysqlConn; } protected function getRedis($data) { $redis_conf = getRedisConfig(crc32($data)); $r = new phpcommon\Redis(array( 'host' => $redis_conf['host'], 'port' => $redis_conf['port'], 'passwd' => $redis_conf['passwd'] )); return $r; } protected function isValidSex($sex) { return in_array($sex, array(0, 1, 2)); } protected function getUserInfo($fields) { $row = phpcommon\SqlHelper::selectOne ($this->getSelfMysql(), 'user', $fields, array( 'accountid' => $this->getAccountId() ) ); if (empty($row)) { phpcommon\sendError(500, '服务器内部错误'); error_log('getUserInfo error '. $this->getAccountId()); die(); } return $row; } protected function getOrmUserInfo() { $row = phpcommon\SqlHelper::ormSelectOne ($this->getSelfMysql(), 'user', array( 'accountid' => $this->getAccountId() ) ); if (empty($row)) { phpcommon\sendError(500, '服务器内部错误'); error_log('getUserInfo error '. $this->getAccountId()); die(); } return $row; } protected function safeGetOrmUserInfo() { $row = phpcommon\SqlHelper::ormSelectOne ($this->getSelfMysql(), 'user', array( 'accountid' => $this->getAccountId() ) ); return $row ? $row : null; } protected function updateUserInfo($fieldsKv) { phpcommon\SqlHelper::update ($this->getSelfMysql(), 'user', array( 'accountid' => $this->getAccountId() ), $fieldsKv ); } protected function sendDataToClient($_code,$_msg,$_data) { echo json_encode(array( 'errcode' => $_code, 'errmsg' => $_msg, 'data' => $_data, )); } protected function getItem($itemId) { $row = phpcommon\SqlHelper::selectOne ($this->getSelfMysql(), 'bag', array( 'id', 'num' ), array( 'id' => $itemId, 'accountid' => $this->getAccountId() )); if (empty($row)) { return null; } return array( 'item_id' => $row['id'], 'item_num' => $row['num'] ); } protected function getItemCount($itemId, $userInfo) { switch ($itemId) { case V_ITEM_GOLD: { return $userInfo['coin_num']; } break; case V_ITEM_DIAMOND: { return $userInfo['diamond_num']; } break; case V_ITEM_LOTTERY: { return $userInfo['rmb_num']; } break; default: { $row = phpcommon\SqlHelper::selectOne ($this->getSelfMysql(), 'bag', array( 'id', 'num' ), array( 'id' => $itemId, 'accountid' => $this->getAccountId() )); return $row ? $row['num'] : 0; } break; } } protected function isVirtualItem($itemId) { $isVirtualItem = false; if($itemId == $this->goldID) { $isVirtualItem = true; } else if($itemId == $this->lotteryID) { $isVirtualItem = true; } return $isVirtualItem; } protected function addItem($items) { foreach ($items as $item) { error_log("准备添加道具======".json_encode($items)); if ($this->isVirtualItem($item['item_id'])) { if ($item['item_id'] == $this->goldID) { $this->addGold($item['item_num']); error_log("添加金币=====".$item['item_num']); } else if ($item['item_id'] == $this->lotteryID){ $this->addLottery($item['item_num']); error_log("添加奖券=====".$item['item_num']); } } else { phpcommon\SqlHelper::insertOrUpdate ($this->getSelfMysql(), 'bag', array( 'accountid' => $this->getAccountId(), 'id' => $item['item_id'] ), array( 'accountid' => $this->getAccountId(), 'id' => $item['item_id'], 'color_id' => 0, 'status' =>1, 'active_time' =>'', 'num' => $item['item_num'], 'create_time' => $this->getNowTime(), 'modify_time' => $this->getNowTime() ), array( 'num' => function () use($item) { return "num + {$item['item_num']}";}, 'modify_time' => $this->getNowTime() ) ); } } } protected function decItem($items) { foreach ($items as $item) { if ($this->isVirtualItem($item['item_id'])) { // if ($item['item_id'] == VIRTUAL_ITEM_GOLD_ID) { // $this->decGold($item['item_num']); // } } else { phpcommon\SqlHelper::update ($this->getSelfMysql(), 'bag', array( 'accountid' => $this->getAccountId(), 'id' => $item['item_id'] ), array( 'num' => function () use($item) { return "CASE WHEN num < {$item['item_num']} THEN 0 ELSE num - {$item['item_num']} END"; }, 'modify_time' => $this->getNowTime() ) ); } } } protected function deleteItem($item) { $tmpItemID = $item["item_id"]; $beDeleteNum = $item['item_num']; $accountID = $this->getAccountId(); $conn = $this->getMysql($accountID); $sqlStr = "SELECT id,num FROM bag WHERE accountid=:accountid AND id=:itemId"; $row = $conn->execQuery($sqlStr,array(':accountid' => $accountID,':itemId' =>$tmpItemID)); $code = 100; if($row) { $num1 = $row[0]['num']; if($num1 < $beDeleteNum) { $code = 98;//道具不足 } } else { $code = 99;//道具不存在 } return $code; } protected function decGold($decGold) { phpcommon\SqlHelper::update ( $this->getSelfMysql(), 'user', array( 'accountid' => $this->getAccountId() ), array( 'coin_num' => function () use($decGold) { return "CASE coin_num WHEN coin_num < {$decGold} THEN 0 ELSE coin_num - {$decGold} END"; } ) ); // $this->incV(TN_CONSUME_GOLD, 0, $decGold); // $this->incV(TN_CONSUME_GOLD, $this->getNowDaySeconds(), $decGold); } protected function addGold($addGold) { phpcommon\SqlHelper::update ( $this->getSelfMysql(), 'user', array( 'accountid' => $this->getAccountId() ), array( 'coin_num' => function () use($addGold) { return "coin_num + {$addGold}"; } ) ); } protected function addLottery($addLottery) { phpcommon\SqlHelper::update ( $this->getSelfMysql(), 'user', array( 'accountid' => $this->getAccountId() ), array( 'rmb_num' => function () use($addLottery) { return "rmb_num + {$addLottery}"; } ) ); } protected function checkPriceEnough($_priceID,$_priceNum) { //$priceStrArr = explode(":",$price); $tmpID = $_priceID; $priceNum = $_priceNum; $accountID = $this->getAccountId(); $conn = $this->getMysql($accountID); $sqlStr = null; $row = null; $tmpNum = 0; if($tmpID == $this->goldID) { $sqlStr = "SELECT coin_num FROM user WHERE accountid=:accountid;"; } else if($tmpID == $this->diamondID) { $sqlStr = "SELECT diamond_num FROM user WHERE accountid=:accountid;"; } $code = 100; if($sqlStr) { $row = $conn->execQuery($sqlStr,array(':accountid' => $accountID)); if($row) { if($tmpID == $this->goldID) { $tmpNum = $row[0]["coin_num"]; if($tmpNum < $priceNum) { $code = 88;//金币不足 } } else if($tmpID == $this->diamondID) { $tmpNum = $row[0]["diamond_num"]; if($tmpNum < $priceNum) { $code = 87;//钻石不足 } } } else { $code = 86;//道具不足 } } return $code; } protected function getTalentLv($skillId, $skillTypeId) { $row = phpcommon\SqlHelper::selectOne ( $this->getSelfMysql(), 'gun_intensify', array( 'gun_type_id', 'skill_id', 'skill_lv' ), array( 'accountid' => $this->getAccountId(), 'skill_id' => $skillId, 'gun_type_id' => $skillTypeId ) ); return $row ? $row['skill_iv'] : 0; } protected function hasEnoughItemsEx($items, &$lackItem) { $userInfo = $this->getUserInfo(array( 'coin_num', 'diamond_num', 'rmb_num' )); foreach ($items as $item) { $inventory = $this->getItemCount($item['item_id'], $userInfo); if ($inventory < $item['item_num']) { $lackItem = array( 'item_id' => $item['item_id'], 'item_num' => $item['item_num'], 'inventory' => $inventory ); return false; } } return true; } protected function getDtoUserInfo($userInfo) { return array( 'game_times' => $userInfo['game_times'], 'win_times' => $userInfo['win_times'], 'high_kill' => $userInfo['kill_his'], 'kills' => $userInfo['kills'], 'high_harm' => $userInfo['harm_his'], 'harm' => $userInfo['harm'], 'add_HP' => $userInfo['add_HP'], 'alive_time' => $userInfo['alive_time'], 'coin_num' => $userInfo['coin_num'], 'first_fight' => $userInfo['first_fight'], 'collect_status' => $userInfo['collect_status'], 'keys_num' => $userInfo['keys_num'], 'kefu_status' => $userInfo['kefu_status'], 'box_num' => $userInfo['box_num'], 'diamond_num' => $userInfo['diamond_num'], 'pass_status' => $userInfo['pass_status'], 'season_status' => $userInfo['season_status'], 'first_gift' => $userInfo['first_gift'], 'sum_coin' => $userInfo['sum_coin'], 'recharge_times_total' => $userInfo['recharge_times_total'], 'first_login' => $userInfo['first_login'], 'daily_first_login' =>$userInfo['daily_first_login'], 'vip_score' => $userInfo['vip_score'], 'coin_nums' => $userInfo['coin_num'], 'diamond_nums' => $userInfo['diamond_num'], 'free_box' => $userInfo['free_box'], 'season_games' => $userInfo['season_games'], 'season_win' => $userInfo['season_win'], 'sea_max_kill' => $userInfo['sea_max_kill'], 'sea_max_hart' => $userInfo['sea_max_hart'], 'sea_avg_kill' => $userInfo['sea_avg_kill'], 'free_dou_lot_ticket' => $userInfo['free_dou_lot_ticket'], 'free_lot_ticket' => $userInfo['free_lot_ticket'], 'time' => phpcommon\getNowTime(), 'newhand' => $userInfo['newhand'], 'coin_times' => $userInfo['coin_times'], 'newInfo' => $userInfo['newInfo'], 'first_day_ad' => $userInfo['first_day_ad'], 'integral' => $userInfo['integral'], 'share_video_times' => $userInfo['share_video_times'], 'share_video_sums' => $userInfo['share_video_sums'], 'act_video_status' => $userInfo['act_video_status'], 'act_ad_status' => $userInfo['act_ad_status'], 'biogame_times' => $userInfo['biogame_times'], 'shop_view_times' => $userInfo['shop_view_times'], 'new_first_equip' => $userInfo['new_first_equip'], 'newhand2' =>$userInfo['newhand2'], 'game_times2' =>$userInfo['game_times2'], 'view_times2' =>$userInfo['view_times2'], 'guildcoin_num' => $userInfo['guildcoin_num'], 'new_second_equip' => $userInfo['new_second_equip'], 'rmb_num' => $userInfo['rmb_num'], 'max_single_recharge' => $userInfo['max_single_recharge'], 'passcard' => $userInfo['passcard'], 'rmb_lot_ticket' => $userInfo['rmb_lot_ticket'], 'daily_max_single' => $userInfo['daily_max_single'], 'head_kuang_id' => $userInfo['head_kuang_id'], 'daily_score' => $userInfo['daily_score'], 'score' => $userInfo['score'], 'daily_offline' => $userInfo['daily_offline'], 'user_name' => $userInfo['user_name'], 'avatar_url' => $userInfo['avatar_url'], 'create_user' => $userInfo['create_user'], 'sex' => $userInfo['sex'], 'lv' => $userInfo['lv'], 'lv_exp' => $userInfo['lv_exp'], 'hiid' => $userInfo['hi_id'], 'hero_id' => $userInfo['hero_id'], 'max_seasonScore' => $userInfo['max_integral'] ); } }