using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace Application.Web.Controllers.Map;
[ApiExplorerSettings(GroupName = "Map")]
[Route("Map/[controller]/[action]")]
[ApiController]
[Authorize]
public class MapBusController : ControllerBase
{
private readonly IGameMapService _mapService;
private readonly IMessageService _messageService;
private readonly IGameMagicService _magicService;
public MapBusController(IGameMapService mapService, IMessageService messageService, IGameMagicService magicService)
{
_mapService = mapService;
_messageService = messageService;
_magicService = magicService;
}
///
/// 获取业务信息
///
///
///
[HttpGet]
public async Task GetBusiness(int id)
{
string userId = StateHelper.userId;
var busData = await _mapService.GetMapBusInfo(id);
if (busData == null)
{
return PoAction.Message("业务不存在!");
}
var onMap = await _mapService.GetUserOnMapId(userId);
if (busData.busCode != onMap)
{
return PoAction.Message("业务不存在!");
}
var checkResult = await GameBus.CheckNeed(userId, busData.busNeed, 1);
return PoAction.Ok(new { data = busData, result = checkResult });
}
///
/// 传送
///
///
///
///
[HttpGet]
public async Task MapBusTo(int id, int num)
{
string userId = StateHelper.userId;
int areaId = StateHelper.areaId;
var busData = await _mapService.GetMapBusInfo(id);
if (busData == null)
{
return PoAction.Message("业务不存在!");
}
if (busData.busType != "ToMap")
{
return PoAction.Message("业务不存在!");
}
var toData = JsonConvert.DeserializeObject>(busData.busContent);
if (num > (toData.Count - 1))
{
return PoAction.Message("业务不存在!");
}
var onMap = await _mapService.GetUserOnMapId(userId);
if (busData.busCode != onMap)
{
return PoAction.Message("业务不存在!");
}
var mapToData = toData[num];
if (TimeAssist.GetHourNum < mapToData.sTime || TimeAssist.GetHourNum > mapToData.eTime)
{
return PoAction.Message($"当前时间不允许进入");
}
#region 验证机制
if (mapToData.code == nameof(MapEnum.MapCode.Magic_Map)) //魔城场景,验证否否进入过
{
if (await _magicService.CheckInMagic(userId) == false)
{
return PoAction.Message($"您的魔城记录冷却中,冷却时间为7天!");
}
}
#endregion
var checkResult = await GameBus.CheckNeed(userId, busData.busNeed, 1);
if (checkResult.result == false)
{
return PoAction.Message("不满足传送要求!");
}
if (await GameBus.UpdateBag(userId, 0, busData.busNeed, "业务传送"))
{
var ResultMap = await _mapService.GetToMapInfo(userId, mapToData.mapId, true, true);
if (ResultMap != null)
{
if (mapToData.code == nameof(MapEnum.MapCode.Magic_Map)) //魔城场景
{
await _magicService.UpdateUserMagicTime(userId,areaId);
}
return PoAction.Ok(true);
}
else
{
return PoAction.Message("操作失败,请稍后尝试!");
}
}
else
{
return PoAction.Message("操作失败,请稍后尝试!");
}
}
///
/// 打开宝箱
///
///
///
[HttpGet]
public async Task MapBusBox(int id)
{
string userId = StateHelper.userId;
var busData = await _mapService.GetMapBusInfo(id);
if (busData == null)
{
return PoAction.Message("业务不存在!");
}
if (busData.busType != "Box")
{
return PoAction.Message("业务不存在!");
}
var onMap = await _mapService.GetUserOnMapId(userId);
if (busData.busCode != onMap)
{
return PoAction.Message("业务不存在!");
}
var checkResult = await GameBus.CheckNeed(userId, busData.busNeed, 1);
if (checkResult.result == false)
{
return PoAction.Message("不满足开启要求!");
}
if (await GameBus.UpdateBag(userId, 0, busData.busNeed, "业务传送"))
{
string message = "";
var park = JsonConvert.DeserializeObject(busData.busContent);
var award = GameBus.GetRandomGoods(park);
if (award.Count > 0)
{
message = $"开启了[{park.name}],获得:";
foreach (var item in award)
{
message += $"{item.name}+{item.count},";
}
message = message.TrimEnd(',');
await GameBus.UpdateBag(userId, 1, award, $"开启:{park.name}获得");
await _messageService.SendBroadcast(userId, nameof(MessageEnum.BroadcastCode.Award), message);
}
else
{
message = "空空如也,什么也没有得到!";
}
return PoAction.Ok(true, message);
}
else
{
return PoAction.Message("操作失败,请稍后尝试!");
}
}
}