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) { 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; } } else if ($itemMeta['type'] == mt\Item::GIFT_PACKAGE_TYPE) { $this->openGiftPackage($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3); } else { $this->_rspErr(4, '该道具功能暂未实现'); } } 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 )); } private function openGiftPackage($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3) { $dropMeta = mt\Drop::get($itemMeta['drop']); if (!$dropMeta) { $this->_rspErr(1, '配置表错误'); return; } $costItems = mt\Item::getUseCostItems($itemMeta); error_log(json_encode($costItems)); $lackItem = null; if (!$this->_hasEnoughItems($costItems, $lackItem)) { $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); return; } $this->_decItems($costItems); $this->_decItems(array( array( 'item_id' => $itemMeta['id'], 'item_num' => 1 ) )); $this->_scatterDrop('gift_package:' . $itemMeta['id'], $dropMeta, $this->awardService, $this->propertyChgService); $this->propertyChgService->addBagChg(); $this->_rspData(array( 'award' => $this->awardService->toDto(), 'property_chg' => $this->propertyChgService->toDto(), )); } }