game2005api/webapp/controller/BagController.class.php
aozhiwei a8e2217c2b 1
2021-12-08 17:05:58 +08:00

178 lines
5.1 KiB
PHP

<?php
require_once('mt/Parameter.php');
require_once('mt/Item.php');
require_once('models/Bag.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
require_once('services/NameService.php');
use phpcommon\SqlHelper;
use models\Bag;
class BagController extends BaseAuthedController {
private $propertyChgService = null;
private $awardService = null;
public function _handlePre()
{
parent::_handlePre();
$this->propertyChgService = new services\PropertyChgService();
$this->awardService = new services\AwardService();
}
public function itemList()
{
$this->_rspData(array(
'item_list' => Bag::all(),
));
}
public function useItem()
{
$itemId = getReqVal('item_id', 0);
$itemNum = getReqVal('item_num', 0);
$param1 = getReqVal('param1', '');
$param2 = getReqVal('param2', '');
$param3 = getReqVal('param3', '');
if ($itemNum < 0) {
$this->_rspErr(1, 'item_num必须大于0');
return;
}
$itemDb = Bag::find($itemId);
if (!isset($itemDb) || $itemDb['item_num'] <= 0) {
$this->_rspErr(1, '道具不足');
return;
}
$itemMeta = mt\Item::get($itemId);
if (!$itemMeta) {
$this->_rspErr(2, '配置表错误');
return;
}
if ($itemMeta['type'] != mt\Item::FUNC_TYPE) {
$this->_rspErr(3, '该道具为不可使用道具');
return;
}
switch ($itemMeta['sub_type']) {
case mt\Item::FUNC_RENAME_CARD_SUBTYPE:
{
$this->renameCard($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3);
}
break;
default:
{
$this->_rspErr(4, '该道具功能暂未实现');
return;
}
break;
}
}
public function rename()
{
$itemDto = Bag::findByType(mt\Item::FUNC_TYPE, mt\Item::FUNC_RENAME_CARD_SUBTYPE);
$userInfo = $this->_getOrmUserInfo();
if (!$itemDto || $itemDto['item_num'] < 0) {
if (mt\Parameter::getVal('rename_diamond_cost', 0) <= 0) {
$this->_rspErr(1, '配置表错误');
return;
}
if ($userInfo['diamond'] < mt\Parameter::getVal('rename_diamond_cost', 0)) {
$this->_rspErr(1, '道具不足');
return;
}
}
$errCode = 0;
$errMsg = '';
$this->internalRename(getReqVal('name', ''), getReqVal('name_sign', ''), $errCode, $errMsg);
if ($errCode) {
$this->_rspErr($errCode, $errMsg);
return;
}
if (!$itemDto || $itemDto['item_num'] <= 0) {
$this->_decItems(array(
array(
'item_id' => V_ITEM_DIAMOND,
'item_num' => mt\Parameter::getVal('rename_diamond_cost', 0)
)
));
$this->propertyChgService->addUserChg();
} else {
$this->_decItems(array(
array(
'item_id' => $itemDto['item_id'],
'item_num' => 1
)
));
$this->propertyChgService->addBagChg();
}
$this->_rspData(array(
'property_chg' => $this->propertyChgService->toDto(),
));
}
private function renameCard($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3)
{
$errCode = 0;
$errMsg = '';
$this->internalRename($param1, $param2, $errCode, $errMsg);
if ($errCode) {
$this->_rspErr($errCode, $errMsg);
return;
}
$this->_decItems(array(
array(
'item_id' => $itemMeta['id'],
'item_num' => 1
)
));
$this->propertyChgService->addUserChg();
$this->propertyChgService->addBagChg();
$this->_rspData(array(
'property_chg' => $this->propertyChgService->toDto(),
));
}
private function internalRename($name, $nameSign, &$errCode, &$errMsg)
{
$errCode = 0;
$errMsg = '';
if (mb_strlen($name) < 3) {
$errCode = 5;
$errMsg = '参数错误名字长度不得小于3';
return;
}
if (mb_strlen($name, 'utf8') > 7) {
$errCode = 5;
$errMsg = '参数错误名字长度不得大于7';
return;
}
$nameService = new services\NameService();
if (!$nameService->verifyNameSign($name, $nameSign)){
$errCode = 5;
$errMsg = '参数错误名,签名校验失败';
return;
}
if ($nameService->nameUsed($name)){
$errCode = 5;
$errMsg = '名字已被占用';
return;
}
$ret = $nameService->useName($name);
if (!$ret) {
$errCode = 10;
$errMsg = '服务器内部错误';
return;
}
$this->_updateUserInfo(array(
'name' => $name
));
}
}