This commit is contained in:
yangduo 2025-04-15 23:14:25 +08:00
parent d71b656ca2
commit 1920b2ec8d

View File

@ -119,13 +119,14 @@ class SoloController
),
),
);
$talent = array(0, 0, 0);
$offlinehours = 0;
if (!$solorow) {
$medals = $medalsgrowlimit;
$ret = $conn->execScript(
'INSERT INTO solo(accountid, level, exp, medals, lastredeem, lastoffline, gamelevel, funds, create_time, modify_time) ' .
' VALUES(:account_id, 1, 0, :medals, :lastredeem, :lastoffline, :gamelevel, :funds, :create_time, :modify_time) ' .
' ON DUPLICATE KEY UPDATE accountid=:account_id, level=1, exp=0, medals=:medals, lastredeem=:lastredeem, lastoffline=:lastoffline, gamelevel=:gamelevel, funds=:funds, modify_time=:modify_time;',
'INSERT INTO solo(accountid, level, exp, medals, lastredeem, lastoffline, gamelevel, funds, talent, create_time, modify_time) ' .
' VALUES(:account_id, 1, 0, :medals, :lastredeem, :lastoffline, :gamelevel, :funds, :talent, :create_time, :modify_time) ' .
' ON DUPLICATE KEY UPDATE accountid=:account_id, level=1, exp=0, medals=:medals, lastredeem=:lastredeem, lastoffline=:lastoffline, gamelevel=:gamelevel, funds=:funds, talent=:talent, modify_time=:modify_time;',
array(
':account_id' => $account_id,
':medals' => $medals,
@ -133,6 +134,7 @@ class SoloController
':lastoffline' => $nowtime,
':gamelevel' => json_encode($gamelevel),
':funds' => json_encode($funds),
':talent' => json_encode($talent),
':create_time' => $nowtime,
':modify_time' => $nowtime
)
@ -193,6 +195,10 @@ class SoloController
if (!is_null($solorow['funds']) && !empty($solorow['funds'])) {
$funds = json_decode($solorow['funds']);
}
if (!is_null($solorow['talent']) && !empty($solorow['talent'])) {
$talent = json_decode($solorow['talent'], true);
}
}
$upexp = 0;
@ -213,6 +219,11 @@ class SoloController
'offlinehours' => $offlinehours,
'gamelevel' => $gamelevel,
'funds' => $funds,
'talent' => array(
'norm' => $talent[0],
'unlockadv' => $talent[1],
'adv' => $talent[2],
),
));
}
@ -808,6 +819,180 @@ class SoloController
echo json_encode($response);
}
public function activeTalent()
{
$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;
}
$type = $_REQUEST['type'];
if ($type < 1 || $type > 2) {
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家 1');
return;
}
$solorow = $conn->execQueryOne(
'SELECT talent FROM solo WHERE accountid=:accountid;',
array(
':accountid' => $account_id
)
);
if (!$solorow) {
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家 2');
return;
}
$talent = array(0, 0, 0);
if (!is_null($solorow['talent']) && !empty($solorow['talent'])) {
$talent = json_decode($solorow['talent'], true);
}
$itemnumstr = '';
if ($type == 1) {
//norm
$conf = require('../res/talent@talent.php');
$next = $talent[0] + 1;
if (!array_key_exists($next, $conf)) {
phpcommon\sendError(ERR_USER_BASE + 1, '已最高天赋');
return;
}
$talent[0] = $next;
$itemnumstr = $conf[$next]['item_num'];
if ($conf[$next]['sptalent_id'] != '' && $conf[$next]['sptalent_id'] > $talent[1]) {
$talent[1] = intval($conf[$next]['sptalent_id']);
}
} else {
//adv
if ($talent[1] <= $talent[2]) {
phpcommon\sendError(ERR_USER_BASE + 1, '无可激活');
return;
}
$conf = require('../res/talent2@talent.php');
$found = false;
foreach ($conf as $key => $itemconf) {
if ($key > $talent[2] && $key <= $talent[1]) {
$itemnumstr = $itemconf['item_num'];
$talent[2] = $key;
$found = true;
break;
}
}
if (!$found) {
phpcommon\sendError(ERR_USER_BASE + 1, '无可激活 1');
return;
}
}
$itemstrs = explode(';', $itemnumstr);
$costitem_list = array();
foreach ($itemstrs as $stritem) {
$strs = explode(':', $stritem);
if (count($strs) < 2) {
phpcommon\sendError(ERR_USER_BASE + 1, '材料不足');
return;
}
if ($strs[0] == 10001 || $strs[0] == 10003) {
$row = $conn->execQueryOne(
'SELECT coin_num, diamond_num FROM user WHERE accountid=:accountid;',
array(
':accountid' => $accountid
)
);
if (($strs[0] == 10001 && $strs[1] > $row['coin_num']) ||
($strs[0] == 10003 && $strs[1] > $row['diamond_num'])
) {
phpcommon\sendError(ERR_USER_BASE + 1, '材料不足 1');
return;
}
} else {
$row = $conn->execQueryOne(
'SELECT num FROM bag WHERE accountid=:accountid AND id=:id;',
array(
':accountid' => $account_id,
'id' => $strs[0]
)
);
if (!$row || $row['num'] < $strs[1]) {
phpcommon\sendError(ERR_USER_BASE + 1, '材料不足 2');
return;
}
}
$costitem_list[] = array(
'item_id' => $strs[0],
'item_num' => $strs[1],
);
}
foreach ($costitem_list as $costitem) {
if ($costitem['item_id'] == 10001) {
$conn->execScript(
'UPDATE user SET coin_num=coin_num-:subcoin, modify_time=:modify_time ' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':subcoin' => $costitem['item_num'],
':modify_time' => time()
)
);
} else if ($costitem['item_id'] == 10003) {
$conn->execScript(
'UPDATE user SET diamond_num=diamond_num-:subdiamond, modify_time=:modify_time ' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':subdiamond' => $costitem['item_num'],
':modify_time' => time()
)
);
} else {
$conn->execScript('UPDATE bag SET num=num-:subnum, modify_time=:modify_time ' .
' WHERE accountid=:accountid AND id =:id;',
array(
':accountid' => $account_id,
':id' => $costitem['item_id'],
':subnum' => $costitem['item_num'],
':modify_time' => time()
));
}
}
$conn->execScript(
'UPDATE solo SET talent=:talent, modify_time=:modify_time ' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':talent' => json_encode($talent),
':modify_time' => time()
)
);
echo json_encode(array(
'errcode' => 0,
'errmsg' => '',
'type' => $type,
'talent' => array(
'norm' => $talent[0],
'unlockadv' => $talent[1],
'adv' => $talent[2],
),
));
}
protected function levelaward($isbattle)
{
$account_id = $_REQUEST['account_id'];