hy-farm/muchang/home/controllers/ComposeController.php
2026-05-29 19:54:56 +08:00

130 lines
4.9 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: zn
* Date: 2017/5/18
* Time: 19:51
*/
namespace app\controllers;
use common\models\User;
use common\modules\achievement\AchievementUtil;
use common\modules\dailytask\DailyTaskUtil;
use common\modules\safe\SafeUtil;
use common\modules\systemlog\SystemLogUtil;
use common\services\ClientMessageServices;
use common\services\GameConfigServices;
use common\services\ItemServices;
use common\services\ResultStatusServices;
use common\services\StatusException;
use common\utils\MoneyUtil;
use Yii;
use yii\rest\Controller;
/**
* 合成
* Class StoreController
* @package app\controllers
*/
class ComposeController extends Controller
{
/**
* 合成
* @return array
*/
public function actionDo()
{
$userID = Yii::$app->request->get('user_id');
$composeID = (int)Yii::$app->request->get('compose_id');//加工id
$count = (int)Yii::$app->request->get('count');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
//验证
if (empty($composeID) || $count <= 0) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
SafeUtil::dbOperate(function ($userID, $composeID, $count) {
//获取物品配置数据
$composeConfig = GameConfigServices::getParamByPath('compose.' . $composeID);
if (empty($composeConfig)) throw new StatusException(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
//判断等级是否足够
$user = User::findById($userID);
// if ($composeConfig['level'] > $user->compose_level) throw new StatusException(ResultStatusServices::RS_LEVEL_LIMIT);
for ($i = 1; $i <= 6; $i++) {
if (!isset($composeConfig['fruit_id' . $i])) continue;
MoneyUtil::parseItem($composeConfig['fruit_id' . $i], $count, false, $userID, SystemLogUtil::FROM_TYPE_COMPOSE_EXPEND, ['compose_config' => $composeConfig]);
}
//产出
MoneyUtil::parseItem($composeConfig['goods_id'], $count, true, $userID, SystemLogUtil::FROM_TYPE_COMPOSE_OUTPUT, ['compose_config' => $composeConfig]);
list($itemID, $num) = explode(':', $composeConfig['goods_id']);
$itemID = (int)$itemID;
$num = (int)$num;
$num *= $count;
//任务记录
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_COMPOSE, $itemID, $num);
$config = GameConfigServices::getParamByPath('item_list.' . $itemID);
if (intval($config['type2']) == ItemServices::ITEM_TYPE2_CRYSTAL) {
//成就
AchievementUtil::addCount($userID, AchievementUtil::ID_ACCUMULATION_CRYSTAL, $num);
}
AchievementUtil::addCount($userID, AchievementUtil::ID_COMPOSE,1);
//添加角色经验
return MoneyUtil::addUserExp($userID, (int)$composeConfig['experience']);
}, [$userID, $composeID, $count]);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
/**
* 升级
* @return array
*/
public function actionUpgrade()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
SafeUtil::dbOperate(function ($userID) {
$user = User::findById($userID);
$level = $user->compose_level + 1;
$upgradeConfig = GameConfigServices::getParamByPath('compose_upgrade.' . $level);
if (empty($upgradeConfig)) throw new StatusException(ResultStatusServices::RS_FACTORY_MAX_LEVEL);
$exp = (int)$upgradeConfig['effect_plus_experience'];
if ($exp <= 0) throw new StatusException(ResultStatusServices::RS_CONFIG_ERROR);
for ($i = 1; $i <= 5; $i++) {
if (!isset($upgradeConfig['fruit_id' . $i])) continue;
MoneyUtil::parseItem($upgradeConfig['fruit_id' . $i], 1, false, $userID, SystemLogUtil::FROM_TYPE_COMPOSE_UPGRADE, ['upgrade_config' => $upgradeConfig]);
}
//gold
$gold = (int)$upgradeConfig['gold'];
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::FROM_TYPE_COMPOSE_UPGRADE, ['upgrade_config' => $upgradeConfig]);
MoneyUtil::checkAndModifyRes($userID, false, -$gold, ItemServices::ITEM_TYPE2_GOLD, $log);
//增加经验
$user->compose_exp += $exp;
if ($user->compose_exp >= $upgradeConfig['experience']) {
$user->compose_level++;
$user->compose_exp = 0;
}
if (!$user->save(true, ['compose_level', 'compose_exp', 'updated_at'])) throw new StatusException(ResultStatusServices::RS_SAVE_DB_ERROR);
}, [$userID]);
}
}