diff --git a/DataTables/Datas/礼包/礼包.xlsx b/DataTables/Datas/礼包/礼包.xlsx index 0c632a74..cfdf4596 100644 Binary files a/DataTables/Datas/礼包/礼包.xlsx and b/DataTables/Datas/礼包/礼包.xlsx differ diff --git a/JisolGameCocos/assets/script/consts/API.ts b/JisolGameCocos/assets/script/consts/API.ts index c091aaf2..a3cfaf3c 100644 --- a/JisolGameCocos/assets/script/consts/API.ts +++ b/JisolGameCocos/assets/script/consts/API.ts @@ -16,7 +16,7 @@ export const RData = (data:any,isTips:boolean = false) => { }) } //如果有 rewards 字段 表示要弹出获得资源 - if(data.data['rewards']){ + if(data.data['rewards'] && data.data['rewards'].length){ //弹出获得资源 app.layer.Open(GUI.RewardClaimView,data.data['rewards']) } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/JGameApplication.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/JGameApplication.java index b63f8cc4..6cd98f54 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/JGameApplication.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/JGameApplication.java @@ -7,10 +7,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.retry.annotation.EnableRetry; +import org.springframework.scheduling.annotation.EnableScheduling; @EnableRetry @MapperScan(basePackages = "cn.jisol.game.mapper") @SpringBootApplication +@EnableScheduling public class JGameApplication { public static void main(String[] args) { SpringBeanUtils.context = SpringApplication.run(JGameApplication.class); diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/actions/GActionEnum.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/actions/GActionEnum.java index 0378c5f0..4c495886 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/actions/GActionEnum.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/actions/GActionEnum.java @@ -20,8 +20,11 @@ public interface GActionEnum { /*************** 裁决 *********************/ - int CR_REFEREE_READY = 4000; //裁决就绪 - int CR_REFEREE_PVP_MODE = 4001; //裁决PVP模式 - int CR_REFEREE_PVP_END = 4002; //裁决PVP结束 + int CR_REFEREE_READY = 4000; //裁决就绪 + int CR_REFEREE_PVP_MODE = 4001; //裁决PVP模式 + int CR_REFEREE_PVP_END = 4002; //裁决PVP结束 + + /************** 任务推送 ****************/ + int C_TASK_PUSH_DAY_RESET = 5001; //任务推送 - 每天重置 } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java index 873d34b6..cce30ba8 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java @@ -18,11 +18,11 @@ public class HTTPExceptionHandler { return NewsContext.onMessage("Token 失效",null,LOGIN_TOKEN); } - //材料不够 + //资源不够 @ExceptionHandler(value = ResourceNotException.class) @ResponseBody public NewsContext retryExceptionHandler(ResourceNotException e){ - return NewsContext.onFail("材料不够."); + return NewsContext.onFail(e.getMessage()); } //并发异常 diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GiftController.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GiftController.java new file mode 100644 index 00000000..9452fbf3 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GiftController.java @@ -0,0 +1,114 @@ +package cn.jisol.game.controller.game; + + +import cfg.TB.TbGGift; +import cfg.TbGEnum.TGiftLimit; +import cn.jisol.game.controller.argsresolver.CurrentPlayer; +import cn.jisol.game.controller.exception.ResourceNotException; +import cn.jisol.game.data.ResourceId; +import cn.jisol.game.data.TD; +import cn.jisol.game.entity.table.GiftDayRecord; +import cn.jisol.game.entity.table.GiftRecord; +import cn.jisol.game.entity.table.Player; +import cn.jisol.game.entity.table.PlayerPet; +import cn.jisol.game.service.GiftDayRecordService; +import cn.jisol.game.service.GiftRecordService; +import cn.jisol.game.service.ResourceService; +import cn.jisol.game.vo.news.NewsReward; +import cn.jisol.game.vo.news.ov.ResourceUpdateOV; +import cn.jisol.ngame.util.NewsContext; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +@Api(value = "JNGameDemo - API", tags = {"礼包 - API"}) +@RestController +@RequestMapping("/game/gift") +@ResponseBody +public class GiftController { + + @Autowired + ResourceService resourceService; + + @Autowired + GiftRecordService giftRecordService; + + @Autowired + GiftDayRecordService giftDayRecordService; + + //购买指定礼包 + @ApiImplicitParams({}) + @ApiOperation(value = "购买指定礼包") + @PostMapping("/buy/{giftId}") + @Transactional + public NewsReward buy(@CurrentPlayer Player player, @PathVariable Integer giftId){ + + TbGGift gift = TD.DATA.getTbGGift().get(giftId); + + if(Objects.isNull(gift)) return NewsReward.onFail("暂无该礼包"); + + //判断是否可以购买当前礼包 + if(gift.limit == TGiftLimit.DayLimit){ + //每天限制购买 + if(gift.limitValue <= giftDayRecordService.count(Wrappers.lambdaQuery(GiftDayRecord.class).eq(GiftDayRecord::getPlayerId,player.getPlayerId()).eq(GiftDayRecord::getGiftCfgId,gift.id))){ + return NewsReward.onFail("今天买太多啦 每天再买哦"); + } + } + if(gift.limit == TGiftLimit.Limit){ + //每天限制购买 + if(gift.limitValue <= giftRecordService.count(Wrappers.lambdaQuery(GiftRecord.class).eq(GiftRecord::getPlayerId,player.getPlayerId()).eq(GiftRecord::getGiftCfgId,gift.id))){ + return NewsReward.onFail("当前礼包买太多了 看看其他礼包哦"); + } + } + + resourceService.addResourceValue(player.getPlayerId(), ResourceId.GiftCoupons.id, (long) -gift.price); + + //发放奖励 + List ovs = resourceService.rewards(player.getPlayerId(), gift.rewards); + + + GiftRecord giftRecord = GiftRecord.builder() + .playerId(player.getPlayerId()) + .giftCfgId(gift.id) + .giftCfgName(gift.name) + .giftCfgRewards(Arrays.asList(gift.rewards)) + .giftCfgPrice(gift.price) + .giftBuyingTime(new Date().getTime()) + .build(); + + //保存购买记录 + giftRecordService.save(giftRecord); + giftDayRecordService.save(GiftDayRecord.builder() + .playerId(giftRecord.getPlayerId()) + .giftId(giftRecord.getGiftId()) + .giftCfgId(giftRecord.getGiftCfgId()) + .build()); + + + return NewsReward.onSuccess("购买成功",true,ovs, Arrays.asList(gift.rewards)); + + } + + //查询当天购买记录 + @ApiImplicitParams({}) + @ApiOperation(value = "查询当天购买记录") + @GetMapping("/record/day") + public NewsContext> getGiftDayRecord(@CurrentPlayer Player player){ + return NewsContext.onSuccess("查询成功",giftDayRecordService.list( + Wrappers.lambdaQuery(GiftDayRecord.class) + .eq(GiftDayRecord::getPlayerId,player.getPlayerId()) + )); + } + + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java index bc05d0f0..9eab55ab 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java @@ -14,6 +14,8 @@ public enum ResourceId { DungeonForgedStones(90005), //魂:一品宠物魂 Q1S(90006), + //兑换券 + GiftCoupons(90007), ; public int id; diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/GiftDayRecord.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/GiftDayRecord.java new file mode 100644 index 00000000..b1516c6e --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/GiftDayRecord.java @@ -0,0 +1,25 @@ +package cn.jisol.game.entity.table; + +import cfg.TbGEntity.TReward; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Builder +@Data +@TableName("`gift_day_record`") +public class GiftDayRecord { + + @TableId(type = IdType.AUTO) + private Long giftDayId; //礼包Id + private Long playerId; //玩家Id + private Long giftId; //礼包价格 + private Integer giftCfgId; //礼包配置表Id + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/GiftRecord.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/GiftRecord.java new file mode 100644 index 00000000..711f08a6 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/GiftRecord.java @@ -0,0 +1,31 @@ +package cn.jisol.game.entity.table; + +import cfg.TbGEntity.TReward; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Builder +@Data +@TableName("`gift_record`") +public class GiftRecord { + + @TableId(type = IdType.AUTO) + private Long giftId; //礼包Id + private Long playerId; //玩家Id + private Integer giftCfgId; //礼包配置表Id + private String giftCfgName; //礼包名称 + + @TableField(typeHandler = FastjsonTypeHandler.class) + private List giftCfgRewards; //礼包奖励 + + private Integer giftCfgPrice; //礼包价格 + private Long giftBuyingTime; //礼包购买时间戳 + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/manager/GScheduledManager.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/manager/GScheduledManager.java new file mode 100644 index 00000000..7fbd3673 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/manager/GScheduledManager.java @@ -0,0 +1,45 @@ +package cn.jisol.game.manager; + +import cn.jisol.game.actions.GActionEnum; +import cn.jisol.game.entity.table.GiftDayRecord; +import cn.jisol.game.network.WebSocket; +import cn.jisol.game.network.client.GClient; +import cn.jisol.game.service.GiftDayRecordService; +import cn.jisol.game.service.GiftRecordService; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class GScheduledManager { + + @Autowired + GiftDayRecordService giftDayRecordService; + + //获取所有在线玩家 + public Map getClients(){ + return WebSocket.CLIENTS; + } + + //每天重置 任务 + @Scheduled(cron="0 0 0 * * ?") + public void dayReset(){ + + System.out.println("定时器执行[每天重置] ScheduledManager - dayReset"); + + //重置每日礼包记录 + giftDayRecordService.remove(Wrappers.lambdaQuery(GiftDayRecord.class)); + System.out.println("定时器执行[每天重置] ScheduledManager - dayReset : 重置每日礼包记录"); + + //通知所有玩家 - 每天重置结束 + getClients().values().forEach(client1 -> { + client1.invoke(GActionEnum.C_TASK_PUSH_DAY_RESET); + }); + + } + + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/GiftDayRecordMapper.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/GiftDayRecordMapper.java new file mode 100644 index 00000000..71413b70 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/GiftDayRecordMapper.java @@ -0,0 +1,11 @@ +package cn.jisol.game.mapper; + +import cn.jisol.game.entity.table.GiftDayRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Component; + +@Component +public interface GiftDayRecordMapper extends BaseMapper { + + +} \ No newline at end of file diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/GiftRecordMapper.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/GiftRecordMapper.java new file mode 100644 index 00000000..4da8ef9c --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/GiftRecordMapper.java @@ -0,0 +1,11 @@ +package cn.jisol.game.mapper; + +import cn.jisol.game.entity.table.GiftRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Component; + +@Component +public interface GiftRecordMapper extends BaseMapper { + + +} \ No newline at end of file diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/GiftDayRecordService.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/GiftDayRecordService.java new file mode 100644 index 00000000..2ff87f9a --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/GiftDayRecordService.java @@ -0,0 +1,9 @@ +package cn.jisol.game.service; + +import cn.jisol.game.entity.table.GiftDayRecord; +import cn.jisol.game.entity.table.GiftRecord; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface GiftDayRecordService extends IService { + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/GiftRecordService.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/GiftRecordService.java new file mode 100644 index 00000000..552db854 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/GiftRecordService.java @@ -0,0 +1,9 @@ +package cn.jisol.game.service; + +import cn.jisol.game.entity.table.Dungeon; +import cn.jisol.game.entity.table.GiftRecord; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface GiftRecordService extends IService { + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/GiftDayRecordServiceImpl.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/GiftDayRecordServiceImpl.java new file mode 100644 index 00000000..1ba0e9f2 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/GiftDayRecordServiceImpl.java @@ -0,0 +1,11 @@ +package cn.jisol.game.service.impl; + +import cn.jisol.game.entity.table.GiftDayRecord; +import cn.jisol.game.mapper.GiftDayRecordMapper; +import cn.jisol.game.service.GiftDayRecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class GiftDayRecordServiceImpl extends ServiceImpl implements GiftDayRecordService { +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/GiftRecordServiceImpl.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/GiftRecordServiceImpl.java new file mode 100644 index 00000000..eeaace86 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/GiftRecordServiceImpl.java @@ -0,0 +1,11 @@ +package cn.jisol.game.service.impl; + +import cn.jisol.game.entity.table.GiftRecord; +import cn.jisol.game.mapper.GiftRecordMapper; +import cn.jisol.game.service.GiftRecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class GiftRecordServiceImpl extends ServiceImpl implements GiftRecordService { +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java index 739f315a..4863101e 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java @@ -1,5 +1,6 @@ package cn.jisol.game.service.impl; +import cfg.TB.TbGResource; import cfg.TbGEntity.TResource; import cfg.TbGEntity.TReward; import cn.jisol.game.controller.exception.GeneralException; @@ -39,6 +40,7 @@ public class ResourceServiceImpl extends ServiceImpl i @Override public Resource addResourceValue(Long playerId, int type, Long value) { + TbGResource tbGResource = TD.DATA.getTbGResource().get(type); LambdaUpdateWrapper eq = Wrappers.lambdaUpdate(Resource.class) .eq(Resource::getPlayerId, playerId) //玩家 @@ -71,17 +73,17 @@ public class ResourceServiceImpl extends ServiceImpl i throw new RetryException("服务器忙碌啦"); } }else{ - throw new ResourceNotException("资源不够"); + throw new ResourceNotException(tbGResource.name+"不够"); } }else{ //更新失败 材料不够 - throw new ResourceNotException("资源不够"); + throw new ResourceNotException(tbGResource.name+"资源不够"); } } //如果资源不够则报错 - if(res.getResourceValue() < 0) throw new ResourceNotException("资源不够"); + if(res.getResourceValue() < 0) throw new ResourceNotException(tbGResource.name+"资源不够"); return res;