1134 lines
48 KiB
PHP
1134 lines
48 KiB
PHP
<?php
|
||
/**
|
||
* Created by PhpStorm.
|
||
* User: zn
|
||
* Date: 2017/5/18
|
||
* Time: 14:29
|
||
*/
|
||
|
||
namespace app\controllers;
|
||
|
||
|
||
use common\models\Farm;
|
||
use common\models\Item;
|
||
use common\models\Land;
|
||
use common\models\Interaction;
|
||
use common\models\User;
|
||
use common\models\Muchang;
|
||
use common\modules\achievement\AchievementUtil;
|
||
use common\modules\dailytask\DailyTaskUtil;
|
||
use common\modules\systemlog\SystemLogUtil;
|
||
use common\modules\rebate\RebateUtil;
|
||
use common\services\ClientMessageServices;
|
||
use common\services\GameConfigServices;
|
||
use common\services\ItemServices;
|
||
use common\services\LandService;
|
||
use common\services\MuchangService;
|
||
use common\services\NewbieGuideService;
|
||
use common\services\RandServices;
|
||
use common\services\ResultStatusServices;
|
||
use common\services\UserLogService;
|
||
use common\services\UserService;
|
||
use common\utils\EnumUtil;
|
||
use common\utils\MoneyUtil;
|
||
use common\utils\RedisKeyUtil;
|
||
use RedisLock\RedisLock;
|
||
use Yii;
|
||
use yii\rest\Controller;
|
||
|
||
/**
|
||
* 农场
|
||
* Class FarmController
|
||
* @package app\controllers
|
||
*/
|
||
class FarmController extends Controller
|
||
{
|
||
|
||
/**
|
||
*获取农场信息
|
||
*/
|
||
public function actionIndex()
|
||
{
|
||
//获取数据
|
||
$userID = Yii::$app->request->get('user_id');
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
$grantRs = NewbieGuideService::grantSeedIfNeeded($userID);
|
||
if ($grantRs != ResultStatusServices::RS_OPERATION_SUCCESS) {
|
||
return ClientMessageServices::sendMessage($grantRs);
|
||
}
|
||
|
||
//更新农场状态
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
LandService::updateAllCropStatus($userID, $farmDbData->id, $farmDbData->level);
|
||
|
||
MuchangService::updateAllCropStatus($userID);
|
||
//获取信息
|
||
$user = User::findById($userID);
|
||
$user->token = Yii::$app->request->get('token');
|
||
|
||
//返回数据
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $user->genClientData());
|
||
}
|
||
|
||
/**
|
||
*更改背景
|
||
*/
|
||
public function actionChangeBg()
|
||
{
|
||
//获取数据
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$itemID = Yii::$app->request->get('item_id');//要切换的背景物品ID
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if (!$itemID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//检查物品是否为背景
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
//if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
//if ($itemConfig['type2'] != ItemServices::ITEM_TYPE2_BG) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//查询数据库中是否有这个商品
|
||
$itemDbData = Item::findOne(['user_id' => $userID, 'item_id' => $itemID]);
|
||
if (!$itemDbData) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_DB);
|
||
|
||
//更改农场背景
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
$farmDbData->bg_image_id = $itemID;
|
||
|
||
if (!$farmDbData->save(true, ['bg_image_id', 'updated_at']))
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_CHANGE_FARM_STYLE, 0, 0);
|
||
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
|
||
}
|
||
|
||
/**
|
||
* 农场升级
|
||
*/
|
||
public function actionUpgrade()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
$farmConfig = GameConfigServices::getParamByPath('farm_level.' . ($farmDbData->level + 1));
|
||
if (!$farmConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);//已经达到最高级
|
||
|
||
$userDbData = User::findById($userID);
|
||
if ($farmConfig['player_level'] > $userDbData->level) return ClientMessageServices::sendMessage(ResultStatusServices::RS_LEVEL_LIMIT);//等级不够
|
||
|
||
//升级
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
//扣除费用
|
||
MoneyUtil::parseAllItem($farmConfig['item_id'], 1, false, $userID, SystemLogUtil::FROM_TYPE_UPGRADE_FARM, ['config' => $farmConfig]);
|
||
|
||
$farmDbData->level++;
|
||
if (!$farmDbData->save(true, ['level', 'updated_at']))
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_UPGRADE_FARM, 0, 0);
|
||
|
||
AchievementUtil::addCount($userID, AchievementUtil::ID_FARM_UPGRADE, $farmDbData->level, true);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
|
||
}
|
||
|
||
/**
|
||
* 农田扩建
|
||
*/
|
||
public function actionExtendLand()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
//查找索引最大的农田
|
||
$maxLandPosition = Land::find()
|
||
->where(['farm_id' => $farmDbData->id])
|
||
->max('position');
|
||
|
||
//获取可扩建的农田配置
|
||
|
||
$nextLandGameConfig = GameConfigServices::getParamByPath('land_extend.' . ($maxLandPosition + 2));//数据库索引从0开始,配置表从1开始的,所以要加2才能获取下一个配置表中的索引
|
||
if (!$nextLandGameConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);//已经扩建完了所有农田
|
||
|
||
//判断等级是个满足
|
||
$userDbData = User::findById($userID);
|
||
if ($nextLandGameConfig['player_level'] > $userDbData->level) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);//等级不够
|
||
|
||
//修改数据
|
||
$landDbData = new Land();
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
//修改金钱
|
||
$gold = $nextLandGameConfig['gold'];
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::FROM_TYPE_EXTEND_LAND, ['config' => $nextLandGameConfig]);
|
||
$rs = UserService::checkAndModifyMoney($userID, false, -$gold, 0, $log);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
$landDbData->farm_id = $farmDbData->id;
|
||
$landDbData->position = $maxLandPosition + 1;
|
||
|
||
if (!$landDbData->save()) return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_EXPAND_LAND, 0, 0);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $landDbData->toArray());
|
||
}
|
||
|
||
/**
|
||
* 农田升级
|
||
*/
|
||
public function actionUpgradeLand()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$level = Yii::$app->request->get('level');//要升级哪一级
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if (!$level || $level < 1 || $level > EnumUtil::LAND_MAX_LEVEL) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
$landDbDataList = Land::findAll(['farm_id' => $farmDbData->id]);
|
||
|
||
//查找当前等级中可升级的农田
|
||
$landDbData = LandService::findLandUpgradeItemByLevel($landDbDataList, $level);
|
||
if (!$landDbData) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//更改可升级的等级
|
||
$level = $landDbData['level'] + 1;
|
||
|
||
//获取升级配置表
|
||
$landUpgradeConfig = GameConfigServices::getLandUpgradeByLevelAndPosition($level, $landDbData['position']);
|
||
if (!$landUpgradeConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//判断等级
|
||
$userDbData = User::findById($userID);
|
||
if ($landUpgradeConfig['player_level'] > $userDbData->level) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//修改数据
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
//扣除费用
|
||
|
||
MoneyUtil::parseAllItem($landUpgradeConfig['item_id'], 1, false, $userID, SystemLogUtil::FROM_TYPE_UPGRADE_LAND, ['config' => $landUpgradeConfig]);
|
||
|
||
//升级
|
||
$landDbData->level = $level;
|
||
if (!$landDbData->save(true, ['level', 'updated_at'])) return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_UPGRADE_LAND, 0, 0);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
$returnData = $landDbData->toArray();
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
|
||
}
|
||
|
||
/**
|
||
* 播种
|
||
*/
|
||
public function actionSowSeeds()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$itemID = Yii::$app->request->get('item_id');//要播种的种子
|
||
$position = Yii::$app->request->get('position');//要播种的土地位置
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if (!$itemID || $position === null || $position < 0 || $position > EnumUtil::LAND_MAX_POSITION)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//获取配置
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
|
||
//神秘种子
|
||
if ($itemConfig['type2'] == ItemServices::ITEM_TYPE2_MYSTERY_SEED) {
|
||
$mysterySeedItemID = $itemID;
|
||
|
||
//$itemID = GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_MYSTERY_SEED);
|
||
$cropConfigItem = RandServices::getMySterySeedOddsItem();
|
||
$itemID = GameConfigServices::getSeedItemIDByCropID($cropConfigItem['id']);
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
}
|
||
|
||
//检查类型
|
||
if ($itemConfig['type2'] != ItemServices::ITEM_TYPE2_SEEDS)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_ITEM_TYPE_ERROR);
|
||
|
||
//检查播种等级
|
||
$userDbData = User::findById($userID);
|
||
if (empty($mysterySeedItemID) && $itemConfig['player_level'] > $userDbData->level)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_LEVEL_LIMIT);
|
||
|
||
//查找数据
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
//修改数据
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
|
||
if (isset($mysterySeedItemID)) {
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $mysterySeedItemID, -1, SystemLogUtil::FROM_TYPE_SOW_SEEDS, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $mysterySeedItemID, false, -1, $log); //扣除神秘种子数据
|
||
} else {
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -1, SystemLogUtil::FROM_TYPE_SOW_SEEDS, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -1, $log);//扣除物品数据
|
||
}
|
||
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//播种
|
||
$isMysterySeed = isset($mysterySeedItemID) ? 1 : 0;
|
||
$rs = LandService::sowSeeds($farmDbData->id, $position, $itemID, $isMysterySeed);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_SOW_SEED, $itemID, 1);
|
||
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_SOW_SEEDS, null, 1);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
$landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $landDbData->toArray());
|
||
}
|
||
|
||
/**
|
||
* 添加幼崽
|
||
*/
|
||
public function actionMeadowCulture()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$itemID = Yii::$app->request->get('item_id');//要播种的种子
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
if (empty($itemConfig)) return ResultStatusServices::RS_NOT_FIND_IN_CONFIG;
|
||
$cropConfig = GameConfigServices::getParamByPath('crop_list.' . $itemConfig['effect_id']);
|
||
if (empty($cropConfig)) return ResultStatusServices::RS_NOT_FIND_IN_CONFIG;
|
||
|
||
// var_dump( $cropConfig);
|
||
//exit;
|
||
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if (!$itemID)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//获取配置
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
|
||
//检查投放等级
|
||
$userDbData = User::findById($userID);
|
||
// if ($itemConfig['player_level'] > $userDbData->level)
|
||
// return ClientMessageServices::sendMessage(ResultStatusServices::RS_LEVEL_LIMIT);
|
||
|
||
$lock = new RedisLock(Yii::$app->redis, RedisKeyUtil::lockLandInteraction($userID, $itemID, $itemDbData->num), RedisLock::FLAG_CATCH_EXCEPTIONS);
|
||
if (!$lock->acquire(10)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAME_TIME_OPERATION);
|
||
|
||
//修改数据
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
|
||
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -1, SystemLogUtil::FROM_TYPE_SOW_SEEDS, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -1, $log);//扣除物品数据
|
||
|
||
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
$Muchang=new Muchang();
|
||
$Muchang->created_at=time();
|
||
$Muchang->crop_config_id=$itemConfig['effect_id'];
|
||
$Muchang->gather_time= time() + intval($cropConfig['seedling_time']) + intval($cropConfig['grow_time']) + intval($cropConfig['ripe_time']);
|
||
$Muchang->start_time=time();
|
||
$Muchang->type=$itemConfig['type2'];
|
||
$Muchang->updated_at=time();
|
||
$Muchang->die_time=time()+intval($cropConfig['seedling_time']) + intval($cropConfig['grow_time']) + intval($cropConfig['life_time']*86400);
|
||
$Muchang->user_id=$userID;
|
||
$Muchang->has_gather=0;
|
||
$Muchang->save();
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_SOW_SEED, $itemID, 1);
|
||
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_SOW_SEEDS, null, 1);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
// $landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $Muchang->toArray());
|
||
}
|
||
/**
|
||
* 收获农田作物
|
||
*/
|
||
public function actionGatherCrop()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$position = Yii::$app->request->get('position');//土地位置
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if ($position === null || $position < 0 || $position > EnumUtil::LAND_MAX_POSITION)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//查找数据
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
|
||
//更新收获状态
|
||
$rs = LandService::updateCropStatus($userID, $farmDbData->id, $position, $farmDbData->level);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS)
|
||
return ClientMessageServices::sendMessage($rs);
|
||
|
||
//修改数据
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
$addExp = 0;
|
||
$rewardText = '';
|
||
try {
|
||
//收获
|
||
$output = 0;
|
||
$itemID = null;
|
||
$rs = LandService::gatherCrop($farmDbData->id, $position, $output, $itemID);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
$rewardText = sprintf('%s:%d', $itemID, $output);
|
||
|
||
if ((int)$itemConfig['type2'] == ItemServices::ITEM_TYPE2_GOLD) {
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, $output, 0, SystemLogUtil::FROM_TYPE_GATHER_CROP, []);
|
||
$rs = UserService::checkAndModifyMoney($userID, true, $output, 0, $log);
|
||
} else {
|
||
//添加到仓库
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, $output, SystemLogUtil::FROM_TYPE_GATHER_CROP, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, true, $output, $log);
|
||
}
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//增加玩家经验
|
||
if ($output > 0) {
|
||
$landDbData = Land::findByFarmIDAndPosition($farmDbData->id, $position);
|
||
$landConfig = GameConfigServices::getLandUpgradeByLevelAndPosition($landDbData->level, $landDbData->position);
|
||
|
||
$farmConfig = GameConfigServices::getParamByPath('farm_level.' . $farmDbData->level);
|
||
|
||
$cropConfig = GameConfigServices::getParamByPath('crop_list.' . $landDbData->crop_id);
|
||
|
||
$percent = floatval(intval($farmConfig['add_exp']) + intval($landConfig['add_exp'])) / 100;
|
||
$addExp = round(intval($cropConfig['exp']) * (1 + $percent));
|
||
if ($addExp > 0) {
|
||
MoneyUtil::addUserExp($userID, $addExp);
|
||
}
|
||
|
||
if ((int)$itemConfig['type2'] != ItemServices::ITEM_TYPE2_GOLD) {
|
||
$zhongzi = GameConfigServices::getParamByPath('store_list.' . ($cropConfig['item_id']-102000));
|
||
if (!empty($zhongzi) && isset($zhongzi['gold'])) {
|
||
//分销返点
|
||
RebateUtil::addRebate($userID, $zhongzi['gold'], RebateUtil::TYPE_BUY);
|
||
}
|
||
}
|
||
}
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_GATHER, $itemID, $output);
|
||
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LAND_GATHER, null, 1);
|
||
|
||
AchievementUtil::addCount($userID, AchievementUtil::ID_GET_FRUIT, 1);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
$landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
$returnData = $landDbData->toArray();
|
||
$returnData['item_id'] = $itemID;
|
||
$returnData['item_add_num'] = $output;
|
||
$returnData['add_exp'] = $addExp;
|
||
$returnData['reward_text'] = $rewardText;
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
|
||
}
|
||
/**
|
||
* 喂养
|
||
*/
|
||
public function actionMeadowFeed()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$itemID = Yii::$app->request->get('item_id');//物品ID
|
||
$id = Yii::$app->request->get('id');//物品ID
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if (!$itemID)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//配置表
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
|
||
|
||
//修改数据
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
//修改仓库物品
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -1, SystemLogUtil::FROM_TYPE_FERTILIZE, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -1, $log);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//修改牧场数据
|
||
$muDbData = Muchang::findOne(['id' => $id]);
|
||
if (!$muDbData) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_DB);
|
||
|
||
|
||
//农作物已经成熟
|
||
if (time() > $muDbData->gather_time) return ClientMessageServices::sendMessage(ResultStatusServices::RS_CROP_RIPE);
|
||
|
||
//安阶段施肥,每次施肥不能超过一个阶段,采用减去播种时间来提升成长时间
|
||
$cropConfig = GameConfigServices::getParamByPath('crop_list.' . $muDbData->crop_config_id);
|
||
|
||
//配置表生长周期是单个周期的时间差,为了方便计算,把生长周期变成从播种开始的时间
|
||
$growPhaseTime1 = $muDbData->start_time + $cropConfig['seedling_time'];
|
||
$growPhaseTime2 = $growPhaseTime1 + $cropConfig['grow_time'];
|
||
$growPhaseTime3 = $growPhaseTime2 + $cropConfig['ripe_time'];
|
||
|
||
$needTime = 0;
|
||
//每个阶段还需要的时间
|
||
if (time() < $growPhaseTime1) $needTime = $growPhaseTime1 - time();
|
||
elseif (time() < $growPhaseTime2) $needTime = $growPhaseTime2 - time();
|
||
elseif (time() < $growPhaseTime3) $needTime = $growPhaseTime3 - time();
|
||
|
||
//修改时间
|
||
|
||
$fertilizeTime = $itemConfig['effect_id'];//肥料时间
|
||
|
||
if ($fertilizeTime > $needTime) {
|
||
$muDbData->start_time -= $needTime;
|
||
$muDbData->gather_time -= $needTime;
|
||
} else {
|
||
$muDbData->start_time -= $fertilizeTime;
|
||
$muDbData->gather_time -= $fertilizeTime;
|
||
}
|
||
|
||
if (!$muDbData->save(true, ['start_time', 'gather_time', 'updated_at']))
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
|
||
|
||
//更新农田状态
|
||
$rs = MuchangService::updateAllCropStatus($userID);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_FERTILIZATION, $id, 0);
|
||
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LAND_FER, null, 1);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
$muDbData = Muchang::findOne(['id' => $id]);
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $muDbData->genClientData());
|
||
}
|
||
|
||
|
||
/**
|
||
* 收货农场
|
||
*/
|
||
public function actionMeadowGather()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$id = Yii::$app->request->get('id');//选中的ID
|
||
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if ($id === null || $id < 0 )
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//查找数据
|
||
$farmDbData = Muchang::findOne(['id' => $id]);
|
||
|
||
//判断时间,农作物是否可收获
|
||
if ($farmDbData->is_ripe != 1) return ClientMessageServices::sendMessage(ResultStatusServices::RS_CROP_NOT_RIPE);
|
||
|
||
//检查是否已收获过
|
||
if ($farmDbData->has_gather != 0) return ClientMessageServices::sendMessage(ResultStatusServices::RS_CROP_HAD_GATHER);
|
||
|
||
//获取配置
|
||
$cropConfig = GameConfigServices::getParamByPath('crop_list.' . $farmDbData->crop_config_id);
|
||
if (empty($cropConfig)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
|
||
//设置收获的物品羊牛鸡肉
|
||
$itemID = $cropConfig['item_id'];
|
||
|
||
//收获产量
|
||
$output = $farmDbData->output;
|
||
if($farmDbData->steal_count>0){
|
||
$output=$output-$farmDbData->steal_count;
|
||
}
|
||
|
||
//设置收获的物品羊牛鸡肉(副产品蛋奶)
|
||
$itemID1 = $cropConfig['item_id_1'];
|
||
|
||
//收获产量
|
||
$output1 = $farmDbData->num;
|
||
if(time()>=$farmDbData->die_time){
|
||
$farmDbData->has_gather=1;
|
||
//更新收获状态
|
||
$farmDbData->save(true, ['has_gather']);
|
||
|
||
}else{
|
||
$output1=0;
|
||
$farmDbData->is_ripe=0;
|
||
$farmDbData->is_output=0;
|
||
$farmDbData->num=0;
|
||
$farmDbData->steal_count=0;
|
||
$farmDbData->output=0;
|
||
$farmDbData->start_time=time()-$cropConfig['seedling_time']-$cropConfig['grow_time'];
|
||
$farmDbData->gather_time=time()+$cropConfig['ripe_time'];
|
||
$farmDbData->updated_at=time();
|
||
//更新收获状态
|
||
$farmDbData->save(true, ['is_output','is_ripe','num','output','start_time','gather_time','updated_at','steal_count']);
|
||
}
|
||
|
||
|
||
|
||
//修改数据
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
$addExp = 0;
|
||
try {
|
||
|
||
if(time()>=$farmDbData->die_time){
|
||
$log1 = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID1, $output1, SystemLogUtil::FROM_TYPE_GATHER_CROP, []);
|
||
|
||
$rs1 = ItemServices::checkAndModifyNum($userID, $itemID1, true, $output1, $log1);
|
||
|
||
}
|
||
//添加到仓库
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, $output, SystemLogUtil::FROM_TYPE_GATHER_CROP, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, true, $output, $log);
|
||
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
if($cropConfig['id']==15){
|
||
$item_id=12;
|
||
}elseif($cropConfig['id']==16){
|
||
$item_id=13;
|
||
}else{
|
||
$item_id=11;
|
||
}
|
||
$zhongzi = GameConfigServices::getParamByPath('store_list.' . $item_id);
|
||
|
||
//分销返点
|
||
RebateUtil::addRebate($userID, $zhongzi['gold'], RebateUtil::TYPE_BUY);
|
||
|
||
//增加玩家经验
|
||
|
||
if ($output > 0) {
|
||
|
||
|
||
$cropConfig = GameConfigServices::getParamByPath('crop_list.' . $farmDbData->crop_config_id);
|
||
|
||
$addExp = round(intval($cropConfig['exp']));
|
||
MoneyUtil::addUserExp($userID, $addExp);
|
||
}
|
||
|
||
if(time()>=$farmDbData->die_time){
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_GATHER, $itemID1, $output1);
|
||
}
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_GATHER, $itemID, $output);
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LAND_GATHER, null, 1);
|
||
|
||
AchievementUtil::addCount($userID, AchievementUtil::ID_GET_FRUIT, 1);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
$returnData['meat_item_id'] = $itemID;
|
||
$returnData['meat_num'] = $output;
|
||
$returnData['output_item_id'] = $itemID1;
|
||
$returnData['output_num'] = $output1;
|
||
$returnData['add_exp'] = $addExp;
|
||
$muDbData = Muchang::findOne(['id' => $id]);
|
||
$returnData['muchang'] = $muDbData->genClientData();
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
|
||
}
|
||
/**
|
||
* 清理农田
|
||
*/
|
||
public function actionClearLand()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$position = Yii::$app->request->get('position');//土地位置
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if ($position === null || $position < 0 || $position > EnumUtil::LAND_MAX_POSITION)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//查找数据
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
//更新收获状态
|
||
$rs = LandService::clearLand($farmDbData->id, $position);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_CLEAN_LAND, 0, 0);
|
||
|
||
$landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $landDbData->toArray());
|
||
}
|
||
|
||
/**
|
||
* 施肥
|
||
*/
|
||
public function actionFertilize()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$position = Yii::$app->request->get('position');//土地位置
|
||
$itemID = Yii::$app->request->get('item_id');//物品ID
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if (!$itemID || $position === null || $position < 0 || $position > EnumUtil::LAND_MAX_POSITION)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//配置表
|
||
$itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID);
|
||
if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
|
||
//检查物品类型
|
||
if ($itemConfig['type2'] != 108)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_ITEM_TYPE_ERROR);
|
||
|
||
//查找数据
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
|
||
//修改数据
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
//修改仓库物品
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -1, SystemLogUtil::FROM_TYPE_FERTILIZE, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -1, $log);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//修改农田数据
|
||
$landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
if (!$landDbData) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_DB);
|
||
|
||
//检查农田是否有作物
|
||
if ($landDbData->crop_id == 0) return ClientMessageServices::sendMessage(ResultStatusServices::RS_LAND_NOT_CROP);
|
||
|
||
//农作物已经成熟
|
||
if (time() > $landDbData->crop_gather_time) return ClientMessageServices::sendMessage(ResultStatusServices::RS_CROP_RIPE);
|
||
|
||
//安阶段施肥,每次施肥不能超过一个阶段,采用减去播种时间来提升成长时间
|
||
$cropConfig = GameConfigServices::getParamByPath('crop_list.' . $landDbData->crop_id);
|
||
|
||
//配置表生长周期是单个周期的时间差,为了方便计算,把生长周期变成从播种开始的时间
|
||
$growPhaseTime1 = $landDbData->crop_start_time + $cropConfig['seedling_time'];
|
||
$growPhaseTime2 = $growPhaseTime1 + $cropConfig['grow_time'];
|
||
$growPhaseTime3 = $growPhaseTime2 + $cropConfig['ripe_time'];
|
||
|
||
$needTime = 0;
|
||
//每个阶段还需要的时间
|
||
if (time() < $growPhaseTime1) $needTime = $growPhaseTime1 - time();
|
||
elseif (time() < $growPhaseTime2) $needTime = $growPhaseTime2 - time();
|
||
elseif (time() < $growPhaseTime3) $needTime = $growPhaseTime3 - time();
|
||
|
||
//修改时间
|
||
$fertilizeTime = $itemConfig['effect_id'];//肥料时间
|
||
if ($fertilizeTime > $needTime) {
|
||
$landDbData->crop_start_time -= $needTime;
|
||
$landDbData->crop_gather_time -= $needTime;
|
||
} else {
|
||
$landDbData->crop_start_time -= $fertilizeTime;
|
||
$landDbData->crop_gather_time -= $fertilizeTime;
|
||
}
|
||
|
||
if (!$landDbData->save(true, ['crop_start_time', 'crop_gather_time', 'updated_at']))
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
|
||
|
||
//更新农田状态
|
||
$rs = LandService::updateCropStatus($userID, $farmDbData->id, $position, $farmDbData->level);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_FERTILIZATION, $itemID, 0);
|
||
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LAND_FER, null, 1);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
$landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $landDbData->genClientData());
|
||
}
|
||
|
||
/**
|
||
* 除病害
|
||
*/
|
||
public function actionDisease()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$position = Yii::$app->request->get('position');//土地位置
|
||
$type = Yii::$app->request->get('type');//操作类型
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
if ($position === null || $position < 0 || $position > EnumUtil::LAND_MAX_POSITION)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
|
||
|
||
//判断病虫害类型
|
||
if (!in_array($type, EnumUtil::LAND_DISEASE_TYPE_LIST))
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_LAND_DISEASE_TYPE_ERROR);
|
||
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
//查找数据
|
||
$farmDbData = Farm::findOne(['user_id' => $userID]);
|
||
|
||
$landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
if (!$landDbData) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_DB);
|
||
|
||
//修改数据
|
||
$hasChange = false;
|
||
if ($type == EnumUtil::LAND_DISEASE_TYPE_DRY && $landDbData->has_dry == 1) {
|
||
$landDbData->has_dry = 0;
|
||
$hasChange = true;
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LAND_WATER, null, 1);
|
||
}
|
||
|
||
if ($type == EnumUtil::LAND_DISEASE_TYPE_BUG && $landDbData->has_bug == 1) {
|
||
//扣除除虫剂
|
||
$itemID = GameConfigServices::getItemIDByType2(ItemServices::ITEM_TYPE2_DISINSECTION);
|
||
if (empty($itemID)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -1, SystemLogUtil::FROM_TYPE_DISEASE, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -1, $log);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS)
|
||
return ClientMessageServices::sendMessage($rs);
|
||
|
||
$landDbData->has_bug = 0;
|
||
$hasChange = true;
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LAND_BUG, null, 1);
|
||
}
|
||
|
||
if ($type == EnumUtil::LAND_DISEASE_TYPE_GRASS && $landDbData->has_grass == 1) {
|
||
//扣除除草剂
|
||
$itemID = GameConfigServices::getItemIDByType2(ItemServices::ITEM_TYPE2_WEEDING);
|
||
if (empty($itemID)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
|
||
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -1, SystemLogUtil::FROM_TYPE_DISEASE, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -1, $log);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS)
|
||
return ClientMessageServices::sendMessage($rs);
|
||
|
||
$landDbData->has_grass = 0;
|
||
$hasChange = true;
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LAND_GRASS, null, 1);
|
||
}
|
||
|
||
if ($hasChange && !$landDbData->save(true, ['has_dry', 'has_bug', 'has_grass', 'updated_at']))
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
|
||
|
||
//更新农田状态
|
||
$rs = LandService::updateCropStatus($userID, $farmDbData->id, $position, $farmDbData->level);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
|
||
|
||
$success = true;
|
||
} finally {
|
||
if (isset($success))
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
|
||
$landDbData = Land::findOne(['farm_id' => $farmDbData->id, 'position' => $position]);
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $landDbData->toArray());
|
||
}
|
||
|
||
/**
|
||
* 获取养殖的动物列表
|
||
*/
|
||
public function actionGetMeadowList()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$type = Yii::$app->request->get('type');//动物类型 养103 鸡 104 牛105
|
||
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
|
||
$find = Muchang::find()->where(['user_id' => $userID, 'type' => $type,'has_gather'=>0])->all();
|
||
$json = [];
|
||
$i = 0;
|
||
foreach ($find as $key => $value) {
|
||
$json[$i]['id'] = $value->id;
|
||
$json[$i]['user_id'] = $value->user_id;
|
||
$json[$i]['created_at'] = $value->created_at;
|
||
$json[$i]['crop_config_id'] = $value->crop_config_id;
|
||
$json[$i]['gather_time'] = $value->gather_time;
|
||
$json[$i]['is_ripe'] = $value->is_ripe;
|
||
$json[$i]['created_at'] = $value->created_at;
|
||
$json[$i]['updated_at'] = $value->updated_at;
|
||
$json[$i]['is_output'] = $value->is_output;
|
||
$json[$i]['item_config_id'] = $value->item_config_id;
|
||
$json[$i]['min_output'] = $value->min_output;
|
||
$json[$i]['num'] = $value->num;
|
||
$json[$i]['output'] = $value->output;
|
||
$json[$i]['start_time'] = $value->start_time;
|
||
$json[$i]['type'] = $value->type;
|
||
$i++;
|
||
}
|
||
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $json);
|
||
}
|
||
|
||
/**
|
||
* 获取养殖的动物列表
|
||
*/
|
||
public function actionGetOtherMeadowList()
|
||
{
|
||
$userID = Yii::$app->request->get('be_user_id');
|
||
$type = Yii::$app->request->get('type');//动物类型 养103 鸡 104 牛105
|
||
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
|
||
$find = Muchang::find()->where(['user_id' => $userID, 'type' => $type,'has_gather'=>0])->all();
|
||
$json = [];
|
||
$i = 0;
|
||
foreach ($find as $key => $value) {
|
||
$json[$i]['id'] = $value->id;
|
||
$json[$i]['user_id'] = $value->user_id;
|
||
$json[$i]['created_at'] = $value->created_at;
|
||
$json[$i]['crop_config_id'] = $value->crop_config_id;
|
||
$json[$i]['gather_time'] = $value->gather_time;
|
||
$json[$i]['is_ripe'] = $value->is_ripe;
|
||
$json[$i]['created_at'] = $value->created_at;
|
||
$json[$i]['updated_at'] = $value->updated_at;
|
||
$json[$i]['is_output'] = $value->is_output;
|
||
$json[$i]['item_config_id'] = $value->item_config_id;
|
||
$json[$i]['min_output'] = $value->min_output;
|
||
$json[$i]['num'] = $value->num;
|
||
$json[$i]['output'] = $value->output;
|
||
$json[$i]['start_time'] = $value->start_time;
|
||
$json[$i]['type'] = $value->type;
|
||
$i++;
|
||
}
|
||
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $json);
|
||
}
|
||
|
||
//偷牧场
|
||
/**
|
||
* 偷肉等交互操作
|
||
*/
|
||
public function actionMeadowSteal()
|
||
{
|
||
$userID = Yii::$app->request->get('user_id');
|
||
$beUserID = Yii::$app->request->get('be_user_id');//被操作用户ID
|
||
$id = Yii::$app->request->get('id');//要操作的动物ID
|
||
|
||
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
|
||
|
||
|
||
|
||
//验证要操作的用户
|
||
$beUserDbData = User::findById($beUserID);
|
||
if (!$beUserDbData)
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_USER);
|
||
|
||
//$farmDbData = Farm::findOne(['user_id' => $beUserID]);
|
||
$muchangDbData = Muchang::findOne(['id' => $id]);
|
||
//更新农田状态
|
||
$rs = MuchangService::updateAllCropStatus($beUserID);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS)
|
||
return ClientMessageServices::sendMessage($rs);
|
||
if($muchangDbData['steal_count']>0){
|
||
return ClientMessageServices::sendMessage(1026);
|
||
}
|
||
$muchangDbData = Muchang::findOne(['id' => $id]);
|
||
if($muchangDbData['gather_time']<time()){
|
||
return ClientMessageServices::sendMessage(1016);
|
||
}
|
||
$lock = new RedisLock(Yii::$app->redis, RedisKeyUtil::lockLandInteraction($userID, $beUserID, $id), RedisLock::FLAG_CATCH_EXCEPTIONS);
|
||
if (!$lock->acquire(10)) return ResultStatusServices::RS_SAME_TIME_OPERATION;
|
||
|
||
//更新操作状态
|
||
$stealCount = 0;//偷到的果实数量
|
||
$deductGold = 0;//旧抓捕兼容字段,宠物战斗制度下固定为0
|
||
|
||
try {
|
||
$success = false;
|
||
$change = false;
|
||
$dbTrans = Yii::$app->db->beginTransaction();
|
||
try {
|
||
//偷菜
|
||
|
||
//偷取农田
|
||
$rs = MuchangService::steal($id,$stealCount);
|
||
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS)
|
||
return ClientMessageServices::sendMessage($rs);
|
||
|
||
//修改仓库数量
|
||
$cropConfig = GameConfigServices::getParamByPath('crop_list.' . $muchangDbData->crop_config_id);
|
||
$itemID = $cropConfig['item_id'];
|
||
// die("11111111");
|
||
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, $stealCount, SystemLogUtil::FROM_TYPE_STEAL_GET, []);
|
||
$rs = ItemServices::checkAndModifyNum($userID, $itemID, true, $stealCount, $log);
|
||
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS)
|
||
return ClientMessageServices::sendMessage($rs);
|
||
|
||
//记录日志
|
||
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_STEAL, $itemID, $stealCount, $beUserID);
|
||
UserLogService::addUserLog($beUserID, EnumUtil::USER_LOG_TYPE_BE_STEAL, $itemID, $stealCount, $userID);
|
||
|
||
//任务记录
|
||
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_STEAL_SUCCESS, null, 1);
|
||
|
||
//成就
|
||
AchievementUtil::addCount($userID, AchievementUtil::ID_STEAL, 1);
|
||
AchievementUtil::addCount($userID, AchievementUtil::ID_STEAL_SUCCESS, 1);
|
||
|
||
$change = true;
|
||
|
||
|
||
/*if ($change) {
|
||
//记录交互
|
||
$interactionDbData = new Interaction();
|
||
$interactionDbData->from_user_id = $userID;
|
||
$interactionDbData->be_user_id = $beUserID;
|
||
$interactionDbData->land_create_time = $muchangDbData->start_time;
|
||
$interactionDbData->position = $muchangDbData->id;
|
||
$interactionDbData->type = $type;
|
||
$interactionDbData->num = $stealCount;
|
||
if (!$interactionDbData->save())
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR, $interactionDbData->getErrors());
|
||
}*/
|
||
|
||
$success = true;
|
||
} finally {
|
||
if ($success)
|
||
$dbTrans->commit();
|
||
else {
|
||
$dbTrans->rollBack();
|
||
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
|
||
}
|
||
}
|
||
} finally {
|
||
$lock->release();
|
||
}
|
||
|
||
//返回数据
|
||
$returnData['id'] = $id;
|
||
$returnData['steal_count'] = $stealCount;
|
||
$returnData['deduct_gold'] = $deductGold;
|
||
|
||
$muchangDbData = Muchang::findOne(['id' => $id]);
|
||
$returnData['meadow'] = $muchangDbData->genClientData();
|
||
//ClientMessageServices::sendDebugInfo($landDbData->genClientData());
|
||
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
|
||
}
|
||
}
|