提交资源

This commit is contained in:
PC-20230316NUNE\Administrator
2024-01-18 18:58:07 +08:00
parent 5a58823b4e
commit bc2ddf1fcd
50 changed files with 6498 additions and 38 deletions

View File

@@ -17,9 +17,11 @@ import com.google.gson.JsonObject;
public final class TbGResource extends AbstractBean {
public TbGResource(JsonObject _buf) {
id = _buf.get("id").getAsInt();
icon = _buf.get("icon").getAsString();
name = _buf.get("name").getAsString();
tig = _buf.get("tig").getAsString();
args = _buf.get("args").getAsString();
quality = _buf.get("quality").getAsInt();
}
public static TbGResource deserialize(JsonObject _buf) {
@@ -30,6 +32,10 @@ public final class TbGResource extends AbstractBean {
* id
*/
public final int id;
/**
* 资源图片
*/
public final String icon;
/**
* 资源名称
*/
@@ -42,6 +48,10 @@ public final class TbGResource extends AbstractBean {
* 额外参数
*/
public final String args;
/**
* 资源品质
*/
public final int quality;
public static final int __ID__ = 1780642599;
@@ -52,9 +62,11 @@ public final class TbGResource extends AbstractBean {
public String toString() {
return "{ "
+ "(format_field_name __code_style field.name):" + id + ","
+ "(format_field_name __code_style field.name):" + icon + ","
+ "(format_field_name __code_style field.name):" + name + ","
+ "(format_field_name __code_style field.name):" + tig + ","
+ "(format_field_name __code_style field.name):" + args + ","
+ "(format_field_name __code_style field.name):" + quality + ","
+ "}";
}
}

View File

@@ -0,0 +1,117 @@
package cn.jisol.game.controller.game.mode;
import cfg.TB.TbGSysDungeon;
import cfg.TbGEntity.TDungeon;
import cn.jisol.game.controller.argsresolver.CurrentPlayer;
import cn.jisol.game.data.TD;
import cn.jisol.game.entity.mode.ModeDungeonType;
import cn.jisol.game.entity.table.Dungeon;
import cn.jisol.game.entity.table.Player;
import cn.jisol.game.service.DungeonService;
import cn.jisol.game.service.ResourceService;
import cn.jisol.game.table.TableUtil;
import cn.jisol.game.vo.news.NewsResource;
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.retry.RetryException;
import org.springframework.retry.annotation.Retryable;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.stream.Collectors;
@Api(value = "JNGameDemo - API", tags = {"副本 - API"})
@RestController
@RequestMapping("/game/mode/dungeon")
@ResponseBody
public class GDungeonController {
@Autowired
ResourceService resourceService;
@Autowired
DungeonService dungeonService;
//获取副本信息
@ApiImplicitParams({})
@ApiOperation(value = "获取副本信息")
@PostMapping("/info")
public NewsContext<Map<Integer,Dungeon>> getInfos(@CurrentPlayer Player player){
//获取所有副本信息
List<Dungeon> list = dungeonService.list(Wrappers.lambdaQuery(Dungeon.class).eq(Dungeon::getPlayerId, player.getPlayerId()));
Map<Integer,Dungeon> dungeons = new HashMap<>();
//获取全部副本
TD.DATA.getTbGSysDungeon().getDataList().forEach(info -> {
Dungeon dungeon = null;
try{
dungeon = list.stream().filter(item -> info.id == item.getDungeonCfgId()).collect(Collectors.toList()).get(0);
}catch (Exception ignored){}
if(Objects.isNull(dungeon)){
//如果没有数据则生成数据
try{
//获取当前副本最小的进度
Object table = Objects.requireNonNull(TableUtil.getDataList(Objects.requireNonNull(TableUtil.getTDObject(info.tigs)))).get(0);
dungeon = Dungeon.builder()
.playerId(player.getPlayerId())
.dungeonCfgId(info.id)
.dungeonCfgItemId(TableUtil.getTableId(table))
.build();
dungeonService.save(dungeon);
}catch (Exception ignored){
assert dungeonService != null;
dungeon = dungeonService.getOne(Wrappers.lambdaQuery(Dungeon.class).eq(Dungeon::getPlayerId,player.getPlayerId()).eq(Dungeon::getDungeonCfgId,info.id));
}
}
dungeons.put(dungeon.getDungeonCfgId(),dungeon);
});
return NewsContext.onSuccess("获取成功",dungeons);
}
//消耗钥匙挑战副本
@ApiImplicitParams({})
@ApiOperation(value = "消耗钥匙挑战普通副本")
@PostMapping("/challenge/dungeon/{dungeonId}/{dungeonItemId}")
@Transactional
public NewsResource<Map<Integer,Dungeon>> challengeDungeon(@CurrentPlayer Player player, @PathVariable Integer dungeonId, @PathVariable Integer dungeonItemId){
TbGSysDungeon tbGSysDungeon = TD.DATA.getTbGSysDungeon().get(dungeonId);
if(Objects.isNull(tbGSysDungeon)) return NewsResource.onFail("不存在该副本");
if(!tbGSysDungeon.type.equals(ModeDungeonType.GDungeonMode)) return NewsResource.onFail("错误副本");
//获取副本信息
Map<Integer, Dungeon> infos = this.getInfos(player).data;
//禁止越级挑战
if(infos.get(dungeonId).getDungeonCfgItemId() < dungeonItemId) return NewsResource.onFail("请不要越级挑战哦");
//获取副本
TableUtil.TableData tableData = Objects.requireNonNull(TableUtil.getTableData(tbGSysDungeon.tigs));
//获取等级数据
TDungeon dungeon = Objects.requireNonNull((TDungeon) tableData.get(dungeonItemId).getData());
//扣除消耗
resourceService.addResourceValue(player.getPlayerId(), tbGSysDungeon.consume.id, (long) -tbGSysDungeon.consume.value);
//更新等级
if(infos.get(dungeonId).getDungeonCfgItemId().equals(dungeonItemId)){
if(Objects.nonNull(tableData.get(dungeonItemId + 1))){
infos.get(dungeonId).setDungeonCfgItemId(dungeonItemId + 1);
dungeonService.saveOrUpdate(infos.get(dungeonId));
}
}
//发放奖励
return NewsResource.onSuccess("挑战成功",infos,resourceService.rewards(player.getPlayerId(), dungeon.rewards));
}
}

View File

@@ -0,0 +1,8 @@
package cn.jisol.game.entity.mode;
//副本模式类型
public interface ModeDungeonType {
static String GDungeonMode = "GDungeonMode"; //普通模式
}

View File

@@ -0,0 +1,20 @@
package cn.jisol.game.entity.table;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
@Builder
@Data
@TableName("`dungeon`")
public class Dungeon {
@TableId(type = IdType.AUTO)
private Long dungeonId; //副本唯一Id
private Long playerId; //副本玩家Id
private Integer dungeonCfgId; //副本配置表Id
private Integer dungeonCfgItemId; //副本进度表Id
}

View File

@@ -0,0 +1,11 @@
package cn.jisol.game.mapper;
import cn.jisol.game.entity.table.Dungeon;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Component;
@Component
public interface DungeonMapper extends BaseMapper<Dungeon> {
}

View File

@@ -0,0 +1,8 @@
package cn.jisol.game.service;
import cn.jisol.game.entity.table.Dungeon;
import com.baomidou.mybatisplus.extension.service.IService;
public interface DungeonService extends IService<Dungeon> {
}

View File

@@ -1,11 +1,13 @@
package cn.jisol.game.service;
import cfg.TbGEntity.TResource;
import cn.jisol.game.entity.table.Player;
import cn.jisol.game.entity.table.Resource;
import cn.jisol.game.vo.news.ov.ResourceUpdateOV;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.ArrayList;
import java.util.List;
public interface ResourceService extends IService<Resource> {
@@ -25,6 +27,7 @@ public interface ResourceService extends IService<Resource> {
//返回通用加速卷 减少的时间(ms)
public long timeSpeedUp(int type);
//发放奖励
public List<ResourceUpdateOV> rewards(Long playerId,TResource[] rewards);
}

View File

@@ -0,0 +1,14 @@
package cn.jisol.game.service.impl;
import cn.jisol.game.entity.table.Dungeon;
import cn.jisol.game.entity.table.EquipForgingBench;
import cn.jisol.game.mapper.DungeonMapper;
import cn.jisol.game.mapper.EquipForgingBenchMapper;
import cn.jisol.game.service.DungeonService;
import cn.jisol.game.service.EquipForgingBenchService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class DungeonServiceImpl extends ServiceImpl<DungeonMapper, Dungeon> implements DungeonService {
}

View File

@@ -22,7 +22,9 @@ import org.springframework.stereotype.Service;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class ResourceServiceImpl extends ServiceImpl<ResourceMapper, Resource> implements ResourceService {
@@ -130,5 +132,10 @@ public class ResourceServiceImpl extends ServiceImpl<ResourceMapper, Resource> i
return Integer.parseInt(TD.DATA.getTbGResource().get(type).args) * 1000L;
}
@Override
public List<ResourceUpdateOV> rewards(Long playerId, TResource[] rewards) {
return Arrays.stream(rewards).map(reward -> ResourceUpdateOV.onUpdate(this.addResourceValue(playerId, reward.id, (long) reward.value))).collect(Collectors.toList());
}
}

View File

@@ -33,13 +33,7 @@ public class GTbGOnHookLevels {
}
public int getId(){
try {
Field idField = data.getClass().getField("id");
return (int)idField.get(data);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
return -1;
}
return TableUtil.getTableId(this.data);
}
public TOnHookLevel getData(){
@@ -56,30 +50,20 @@ public class GTbGOnHookLevels {
//通过Id获取关卡
public GTbGOnHookLevel get(int key){
try {
Method method = this.data.getClass().getMethod("get",int.class);
Object data = method.invoke(this.data,key);
if(Objects.isNull(data)) return null;
return new GTbGOnHookLevel(data);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
return null;
}
Object data = TableUtil.getId(this.data,key);
if(Objects.isNull(data)) return null;
return new GTbGOnHookLevel(data);
}
//获取全部关卡
public List<GTbGOnHookLevel> getDataList(){
try {
Method method = null;
method = this.data.getClass().getMethod("getDataList");
Object data = method.invoke(this.data);
if(Objects.isNull(data) || !(data instanceof ArrayList)){
return null;
}
return (List<GTbGOnHookLevel>) ((ArrayList)data).stream().map((Object i) -> new GTbGOnHookLevel(i)).collect(Collectors.toList());
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
Object data = TableUtil.getDataList(this.data);
if(Objects.isNull(data) || !(data instanceof ArrayList)){
return null;
}
return (List<GTbGOnHookLevel>) ((ArrayList)data).stream().map((Object i) -> new GTbGOnHookLevel(i)).collect(Collectors.toList());
}
}

View File

@@ -2,13 +2,59 @@ package cn.jisol.game.table;
import cn.jisol.game.data.TD;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
//文档工具类
public class TableUtil {
public static class TableData{
//表数据
Object data;
public TableData(Object data) {
this.data = data;
}
public Table get(Integer Id){
return new Table(TableUtil.getId(this.data,Id));
}
public List<Table> getDataList(){
return Objects.requireNonNull(TableUtil.getDataList(this.data)).stream().map(Table::new).collect(Collectors.toList());
}
}
public static class Table{
//表行数据
Object data;
public Table(Object data) {
this.data = data;
}
public Integer getId(){
return TableUtil.getTableId(this.data);
}
public Object getData(){
return TableUtil.getTableKey(this.data,"data");
}
}
//获取对象
public static TableData getTableData(String sign){
return new TableData(TableUtil.getTDObject(sign));
}
//获取名字的对象
public static Object getTDObject(String sign){
try {
@@ -19,4 +65,57 @@ public class TableUtil {
}
}
//获取配置列表
public static List<Object> getDataList(Object config){
try {
Method method = null;
method = config.getClass().getMethod("getDataList");
Object data = method.invoke(config);
if(Objects.isNull(data) || !(data instanceof ArrayList)){
return null;
}
return (ArrayList<Object>)data;
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
return null;
}
}
//通过Id获取表数据
public static Object getId(Object config,Integer id){
try {
Method method = config.getClass().getMethod("get",int.class);
Object data = method.invoke(config,id);
if(Objects.isNull(data)) return null;
return data;
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
return null;
}
}
//获取数据Id
public static int getTableId(Object table){
Object id = TableUtil.getTableKey(table,"id");
if (Objects.isNull(id)){
return -1;
}
return (int) id;
}
//获取指定Key数据
public static Object getTableKey(Object table,String key){
try {
Field idField = table.getClass().getField(key);
return idField.get(table);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
}

View File

@@ -37,6 +37,9 @@ public class NewsResource<T> extends NewsContext<T> {
public static <T> NewsResource<T> onSuccess(String msg,T data,ResourceUpdateOV... resource){
return onMessage(msg,data,NEWS_STATE_SUCCESS, Arrays.asList(resource));
}
public static <T> NewsResource<T> onSuccess(String msg,T data,List<ResourceUpdateOV> resource){
return onMessage(msg,data,NEWS_STATE_SUCCESS, resource);
}
public static <T> NewsResource<T> onFail(String msg){
return onMessage(msg,null,NEWS_STATE_FAIL,new ArrayList<>());

View File

@@ -1,38 +1,50 @@
[
{
"id": 90001,
"icon": "90001",
"name": "金币",
"tig": "金币 (目前叫做金币 名称还没有定) 游戏的基础资源 用于升级宠物",
"args": ""
"args": "",
"quality": 1
},
{
"id": 90002,
"icon": "90002",
"name": "锻造石",
"tig": "锻造石 可以锻造装备的石头",
"args": ""
"args": "",
"quality": 1
},
{
"id": 90003,
"icon": "90003",
"name": "通用加速卷",
"tig": "加速卷 用来加速一切需要时间的东西 减少冷却:60s",
"args": "60"
"args": "60",
"quality": 1
},
{
"id": 90004,
"icon": "90004",
"name": "钥匙:金币副本",
"tig": "金币副本的钥匙",
"args": ""
"args": "",
"quality": 1
},
{
"id": 90005,
"icon": "90005",
"name": "钥匙:锻造石副本",
"tig": "锻造石副本的钥匙",
"args": ""
"args": "",
"quality": 1
},
{
"id": 90006,
"icon": "90006",
"name": "魂:一品宠物魂",
"tig": "用于宠物升星",
"args": ""
"args": "",
"quality": 1
}
]