accountId = $_REQUEST['account_id']; $this->sessionId = $_REQUEST['session_id']; if (!phpcommon\isValidSessionId($this->accountId, $this->sessionId)) { phpcommon\sendError(500, '无效的session_id'); die(); } } public function _getAccountId() { return $this->accountId; } public function _getChannel() { return phpcommon\extractChannel($this->_getAccountId()); } public function _getSessionId() { return $this->sessionId; } public function _getRegisterTime() { $registertime = phpcommon\extractRegisterTimeFromSessionId($this->sessionId); return $registertime; } public function _getSelfMysql() { if (!$this->mysqlConn) { $this->mysqlConn = $this->_getMysql($this->_getAccountId()); } return $this->mysqlConn; } public function _getUserInfo($fields) { $row = SqlHelper::selectOne ($this->_getSelfMysql(), 't_user', $fields, array( 'account_id' => $this->_getAccountId() ) ); if (empty($row)) { phpcommon\sendError(500, '服务器内部错误'); error_log('getUserInfo error '. $this->_getAccountId()); die(); } return $row; } public function _getOrmUserInfo() { $row = SqlHelper::ormSelectOne ($this->_getSelfMysql(), 't_user', array( 'account_id' => $this->_getAccountId() ) ); if (empty($row)) { phpcommon\sendError(500, '服务器内部错误'); error_log('getUserInfo error '. $this->_getAccountId()); die(); } return $row; } public function _safeGetOrmUserInfo() { $row = SqlHelper::ormSelectOne ($this->_getSelfMysql(), 't_user', array( 'account_id' => $this->_getAccountId() ) ); return $row ? $row : null; } public function _updateUserInfo($fieldsKv) { SqlHelper::update ($this->_getSelfMysql(), 't_user', array( 'account_id' => $this->_getAccountId() ), $fieldsKv ); } public function _getItemCount($itemId, $userInfo) { switch ($itemId) { case V_ITEM_GOLD: { return $userInfo['gold']; } break; case V_ITEM_DIAMOND: { return $userInfo['diamond']; } break; default: { return Bag::getItemCount($itemId); } break; } return 0; } public function _isVirtualItem($itemId) { return in_array($itemId, array(V_ITEM_GOLD, V_ITEM_DIAMOND)); } public function _addVirtualItem($itemId, $itemNum) { if ($itemNum <= 0){ return; } switch ($itemId) { case V_ITEM_GOLD: { $this->_updateUserInfo(array( 'gold' => function () use($itemNum) { return "gold + ${itemNum}"; } )); } break; case V_ITEM_DIAMOND: { $this->_updateUserInfo(array( 'diamond' => function () use($itemNum) { return "diamond + ${itemNum}"; } )); } break; default: { } break; } } public function _decVirtualItem($itemId, $itemNum) { if ($itemNum <= 0){ return; } switch ($itemId) { case V_ITEM_GOLD: { $this->_updateUserInfo(array( 'gold' => function () use($itemNum) { return "GREATEST(0, gold - ${itemNum})"; } )); } break; case V_ITEM_DIAMOND: { $this->_updateUserInfo(array( 'diamond' => function () use($itemNum) { return "GREATEST(0, diamond - ${itemNum})"; } )); } break; default: { } break; } } public function _addItems($items) { foreach ($items as $item) { if ($this->_isVirtualItem($item['item_id'])) { $this->_addVirtualItem($item['item_id'], $item['item_num']); } else { Bag::addItem($item['item_id'], $item['item_num']); } } } public function _addTryUsingItems($items) { foreach ($items as $item) { Bag::addTryUsingItem($item['item_id'], $item['item_num'], $item['try_using_time']); } } public function _decItems($items) { foreach ($items as $item) { if ($this->_isVirtualItem($item['item_id'])) { $this->_decVirtualItem($item['item_id'], $item['item_num']); } else { Bag::decItem($item['item_id'], $item['item_num']); } } } public function _hasEnoughItems($items, &$lackItem) { $userInfo = $this->_getUserInfo(array( 'gold', 'diamond', )); 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; } public function _getLackItemErrMsg($lackItem) { if (!$lackItem) { return '道具不足'; } $itemMeta = mt\Item::get($lackItem['item_id']); if (!$itemMeta) { return '道具不足'; } if (SERVER_ENV != __ONLINE) { return "${itemMeta['name']}不足 库存:${itemMeta['inventory']} 需求:${itemMeta['item_num']}"; } else { return "${itemMeta['name']}不足"; } } public function _scatterDrop($dropMeta, $awardService, $propertyService) { } public function _getV($x, $y, $defVal = 0) { return DynData::getV($x, $y, $defVal); } public function _setV($x, $y, $val) { DynData::setV($x, $y, $val); } public function _incV($x, $y, $incVal) { DynData::incV($x, $y, $incVal); } public function _decV($x, $y, $decVal) { DynData::decV($x, $y, $decVal); } public function _getDailyV($x, $y, $defVal = 0) { return DynData::getV($x, $y, $defVal); } public function _setDailyV($x, $y, $val) { DynData::setV($x, $y, $val); } public function _incDailyV($x, $y, $incVal) { DynData::incV($x, $y, $incVal); } public function _decDailyV($x, $y, $decVal) { DynData::decV($x, $y, $decVal); } public function _getWeeklyV($x, $y, $defVal = 0) { return DynData::getV($x, $y, $defVal); } public function _setWeeklyV($x, $y, $val) { DynData::setV($x, $y, $val); } public function _incWeeklyV($x, $y, $incVal) { DynData::incV($x, $y, $incVal); } public function _decWeeklyV($x, $y, $decVal) { DynData::decV($x, $y, $decVal); } }