mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-26 18:26:23 +00:00
提交捕捉
This commit is contained in:
@@ -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; //卖出宠物
|
||||
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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("捕捉失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user