game2006api/webapp/controller/BaseAuthedController.class.php
aozhiwei d82b9163e4 1
2021-11-23 16:42:46 +08:00

609 lines
19 KiB
PHP

<?php
require_once('mt/Player.php');
class BaseAuthedController extends BaseController {
private $accountId = '';
private $sessionId = '';
private $mysqlConn = null;
private $goldID = 10001;
private $lotteryID = 10003;
private $diamondID = 10003;
protected $itemArr = array();
public function handlePre()
{
$this->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']
);
}
protected function addHero($heroMeta)
{
if (!$heroMeta) {
return;
}
phpcommon\SqlHelper::upsert
($this->getSelfMysql(),
'hero',
array(
'accountid' => $this->getAccountId(),
'id' => $heroId
),
array(
),
array(
'accountid' => $this->getAccountId(),
'id' => $heroMeta['id'],
'lv' => 1,
'skinid' => $heroMeta['skin_id'],
'skill1_lv1' => 1,
'skill1_lv2' => 1,
'yokeexp' => 0,
'yoketotalexp' => 0,
'createtime' => $this->getNowTime(),
'modifytime' => $this->getNowTime()
)
);
$defSkin = mt\Player::getDefaultSkin($heroMeta);
if ($defSkin) {
$this->addHeroSkinXX($heroMeta['id'], $defSkin);
}
}
protected function addHeroSkinXX($heroId, $skinId)
{
phpcommon\SqlHelper::upsert
($this->getSelfMysql(),
'hero_skin',
array(
'accountid' => $this->getAccountId(),
'hero_id' => $heroId,
'skin_id' => $skinid
),
array(
'skin_state' => 3,
'modifytime' => $this->getNowTime()
),
array(
'accountid' => $this->getAccountId(),
'hero_id' => $heroId,
'skin_id' => $skinId,
'skin_state' => 0,
'get_from' => 0,
'consume_num' => 0,
'trytime' => 0,
'createtime' => $this->getNowTime(),
'modifytime' => $this->getNowTime()
)
);
}
protected function getUsingEquipId()
{
$row = phpcommon\SqlHelper::selectOne
($this->getSelfMysql(),
'equip',
array(
'using_id',
),
array(
'accountid' => $this->getAccountId(),
)
);
return $row ? $row['using_id'] : 0;
}
}