提交捕捉

This commit is contained in:
PC-20230316NUNE\Administrator
2023-11-17 18:29:39 +08:00
parent 62b72bdcfc
commit cb64a6c25f
59 changed files with 4757 additions and 953 deletions

View File

@@ -8,9 +8,4 @@ public interface GActionEnum {
int CHAT_MESSAGE = 2001; //发送聊天消息
int CHAT_RECEIVE_MESSAGE = 2002; //接受聊天消息
/*************** 游戏模式 : 无尽模式(OnHook) **************/
int MODE_ON_HOOK_SPAWN_PET = 3001; //生成宠物
int MODE_ON_HOOK_CAPTURE_PET = 3002; //捕捉宠物
int MODE_ON_HOOK_SELL_PET = 3003; //卖出宠物
}

View File

@@ -1,66 +1,9 @@
package cn.jisol.game.actions.onhook;
import cfg.TB.TbGRole;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.jisol.game.actions.GActionEnum;
import cn.jisol.game.data.GlobalIds;
import cn.jisol.game.data.TD;
import cn.jisol.game.network.client.GClient;
import cn.jisol.game.proto.GOnHookMessage;
import cn.jisol.ngame.actions.core.NAction;
import cn.jisol.ngame.actions.core.NActionMethod;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
//无尽模式
@NAction
public class GOnHookAction {
//生成的宠物列表
public static Map<Long,Map<String, GOnHookMessage.GOnHookPet>> PETS = new HashMap<>();
//生成宠物 返回生成好的列表
@NActionMethod(GActionEnum.MODE_ON_HOOK_SPAWN_PET)
public static GOnHookMessage.GOnHookPets onSpawnPet(GClient client){
//获取玩家生成的宠物
Map<String, GOnHookMessage.GOnHookPet> pets = PETS.get(client.player.getPlayerId());
//如果没有则生成类
if(Objects.isNull(pets)){
PETS.put(client.player.getPlayerId(),pets = new HashMap<>());
}
//获取可生成的最大数量
int max = Integer.parseInt(TD.DATA.getTbGOnHookGlobal().get(GlobalIds.MODE_ON_HOOK_SPAWN_NUM).args);
//获取配置表全部宠物
ArrayList<TbGRole> tdPets = TD.DATA.getTbGRole().getDataList();
//如果小于最大数量则生成
while (pets.size() < max){
//目前随机生成宠物
GOnHookMessage.GOnHookPet hookPet = GOnHookMessage.GOnHookPet.newBuilder()
//生成唯一Id
.setKey(RandomUtil.randomString(8))
//随机取配置表宠物中的宠物
.setPetTbId(tdPets.get(RandomUtil.randomInt(0, tdPets.size() - 1)).id)
.build();
//添加到宠物列表中
pets.put(hookPet.getKey(),hookPet);
}
//返回生成好的宠物
return GOnHookMessage.GOnHookPets.newBuilder().addAllPets(pets.values()).build();
}
}

View File

@@ -1,13 +1,122 @@
package cn.jisol.game.controller.game.mode;
import cfg.TB.TbGRole;
import cn.hutool.core.util.RandomUtil;
import cn.jisol.game.controller.argsresolver.CurrentPlayer;
import cn.jisol.game.data.GlobalIds;
import cn.jisol.game.data.TD;
import cn.jisol.game.entity.game.Player;
import cn.jisol.game.entity.game.PlayerPet;
import cn.jisol.game.proto.GOnHookMessage;
import cn.jisol.game.service.PlayerPetService;
import cn.jisol.ngame.util.NewsContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@Api(value = "JNGameDemo - API", tags = {"无尽模式 - API"})
@RestController
@RequestMapping("/game/mode/onhook")
@RequestMapping("/game/mode/onHook")
@ResponseBody
public class GOnHookController {
@Autowired
PlayerPetService playerPetService;
//生成的野怪列表
public static Map<Long, Map<String, GOnHookMessage.GOnHookPet>> CREEPS = new HashMap<>();
//生成野怪
@ApiImplicitParams({})
@ApiOperation(value = "生成野怪")
@GetMapping("/onSpawnCreeps")
public ResponseEntity<byte[]> onSpawnCreeps(@CurrentPlayer Player player){
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
//获取玩家生成的宠物
Map<String, GOnHookMessage.GOnHookPet> creeps = CREEPS.get(player.getPlayerId());
//如果没有则生成类
if(Objects.isNull(creeps)){
CREEPS.put(player.getPlayerId(),creeps = new HashMap<>());
}
//获取可生成的最大数量
int max = Integer.parseInt(TD.DATA.getTbGOnHookGlobal().get(GlobalIds.MODE_ON_HOOK_SPAWN_NUM).args);
//获取配置表全部宠物
ArrayList<TbGRole> tdPets = TD.DATA.getTbGRole().getDataList();
//如果小于最大数量则生成
while (creeps.size() < max){
//目前随机生成宠物
GOnHookMessage.GOnHookPet hookPet = GOnHookMessage.GOnHookPet.newBuilder()
//生成唯一Id
.setKey(RandomUtil.randomString(8))
//随机取配置表宠物中的宠物
.setPetTbId(tdPets.get(RandomUtil.randomInt(0, tdPets.size())).id)
.build();
//添加到宠物列表中
creeps.put(hookPet.getKey(),hookPet);
}
//返回生成好的宠物
return ResponseEntity.ok().headers(headers).body(GOnHookMessage.GOnHookPets.newBuilder().addAllPets(creeps.values()).build().toByteArray());
}
//出售野怪
@ApiImplicitParams({})
@ApiOperation(value = "出售野怪")
@PostMapping("/onSellCreeps/{creepId}")
public NewsContext<Boolean> onSellCreeps(@PathVariable String creepId){
return NewsContext.onSuccess("卖出成功");
}
//捕捉野怪
@ApiImplicitParams({})
@ApiOperation(value = "捕捉野怪")
@PostMapping("/onCatchCreeps/{creepId}")
public NewsContext<PlayerPet> onCatchCreeps(@PathVariable String creepId,@CurrentPlayer Player player){
//(目前测试阶段 捕捉概率 100%)
//获取玩家生成的野怪
Map<String, GOnHookMessage.GOnHookPet> creeps = CREEPS.get(player.getPlayerId());
//如果没有则生成类
if(Objects.isNull(creeps)){
CREEPS.put(player.getPlayerId(),creeps = new HashMap<>());
return NewsContext.onFail("捕捉失败");
}
GOnHookMessage.GOnHookPet onHookPet;
if(Objects.isNull(onHookPet = creeps.remove(creepId))){
return NewsContext.onFail("捕捉失败");
}
//捕捉
PlayerPet pet = PlayerPet.builder().petPlayerId(player.getPlayerId()).petTbId(onHookPet.getPetTbId()).petGrade(0).build();
if(playerPetService.save(pet)){
return NewsContext.onSuccess("捕捉成功",pet);
}else{
return NewsContext.onFail("捕捉失败");
}
}
}