using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace Application.Web.Controllers.Pub;
///
/// 物品接口
///
[Route("[controller]/[action]")]
[ApiController]
[Authorize]
public class GoodsController : ControllerBase
{
private readonly IGameGoodsService _goodsService;
private readonly IUnitUserAttrService _attrService;
private readonly IMessageService _messageService;
private readonly IUnitUserWeight _weightService;
public GoodsController(IGameGoodsService goodsService, IUnitUserAttrService attrService,
IMessageService messageService, IUnitUserWeight weightService)
{
_goodsService = goodsService;
_attrService = attrService;
_messageService = messageService;
_weightService = weightService;
}
///
/// 获取物品信息
///
/// 物品ID
///
[HttpGet]
public async Task GetGoodsInfo(int goodsId)
{
var goodsInfo = await _goodsService.GetGoodsInfo(goodsId);
if (goodsInfo == null)
{
return PoAction.Message("物品不存在!");
}
string userId = StateHelper.userId;
int count = await _goodsService.GetUserGoodsCount(userId, goodsId);
int UseState = 0;
switch (goodsInfo.code)
{
case "Pack":
UseState = 1;
break;
case "Weight":
UseState = 1;
break;
}
return PoAction.Ok(new { goods = goodsInfo, count, use = UseState });
}
///
/// 使用物品
///
///
///
///
[HttpGet]
public async Task UseGoods(int goodsId, int count)
{
count = count < 1 ? 1 : count;
string userId = StateHelper.userId;
var goodsInfo = await _goodsService.GetGoodsInfo(goodsId);
if (goodsInfo == null)
{
return PoAction.Message("物品不存在!");
}
var MyGoods = await _goodsService.GetUserGoodsCount(userId, goodsId);
if (MyGoods < count)
{
return PoAction.Message("物品不足!");
}
var myLev = await _attrService.GetUserLev(userId);
if (myLev < (int)goodsInfo.lev)
{
return PoAction.Message($"该物品{goodsInfo.lev}级才可使用!");
}
if (await _goodsService.UpdateUserGoods(userId, 0, goodsId, count, "使用物品"))
{
string message = "";
if (goodsInfo.code == nameof(GoodsEnum.Code.Pack)) //使用礼包
{
var park = JsonConvert.DeserializeObject(goodsInfo.content);
var award = GameBus.GetRandomGoods(park, count);
if (award.Count > 0)
{
message = $"打开[{goodsInfo.goodsName}]×{count},获得:";
foreach (var item in award)
{
message += $"{item.name}+{item.count},";
}
message = message.TrimEnd(',');
await GameBus.UpdateBag(userId, 1, award, $"打开礼包:{goodsInfo.goodsName}×{count}获得");
await _messageService.SendBroadcast(userId, nameof(MessageEnum.BroadcastCode.Award), message);
}
else
{
message = "空空如也,什么也没有得到!";
}
}
else if (goodsInfo.code == nameof(GoodsEnum.Code.Weight))
{
int unitWeight = Convert.ToInt32(goodsInfo.content);
await _weightService.UpdateUserMaxWeight(userId, 1, unitWeight, count, goodsInfo.goodsId,
goodsInfo.goodsName);
message = $"使用[{goodsInfo.goodsName}]×{count},负重+{unitWeight * count}";
}
else if (goodsInfo.code == nameof(GoodsEnum.Code.State))
{
}
return PoAction.Ok(true, message);
}
else
{
return PoAction.Message("使用失败,请稍后尝试!");
}
}
}