山河社稷图redis改为mongo存储
parent
02e09225e9
commit
38c39eeea4
|
@ -1,6 +1,8 @@
|
||||||
package com.ljsd.jieling.handler.hardStage;
|
package com.ljsd.jieling.handler.hardStage;
|
||||||
|
|
||||||
import com.ljsd.fight.ArenaRecord;
|
import com.ljsd.fight.ArenaRecord;
|
||||||
|
import com.ljsd.jieling.db.mongo.LjsdMongoTemplate;
|
||||||
|
import com.ljsd.jieling.db.mongo.MongoUtil;
|
||||||
import com.ljsd.jieling.db.redis.RedisKey;
|
import com.ljsd.jieling.db.redis.RedisKey;
|
||||||
import com.ljsd.jieling.db.redis.RedisUtil;
|
import com.ljsd.jieling.db.redis.RedisUtil;
|
||||||
import com.ljsd.jieling.handler.BaseHandler;
|
import com.ljsd.jieling.handler.BaseHandler;
|
||||||
|
@ -10,6 +12,8 @@ import com.ljsd.jieling.logic.dao.root.User;
|
||||||
import com.ljsd.jieling.network.session.ISession;
|
import com.ljsd.jieling.network.session.ISession;
|
||||||
import com.ljsd.jieling.util.CBean2Proto;
|
import com.ljsd.jieling.util.CBean2Proto;
|
||||||
import com.ljsd.jieling.util.MessageUtil;
|
import com.ljsd.jieling.util.MessageUtil;
|
||||||
|
import org.springframework.data.mongodb.core.query.Criteria;
|
||||||
|
import org.springframework.data.mongodb.core.query.Query;
|
||||||
import rpc.protocols.CommonProto;
|
import rpc.protocols.CommonProto;
|
||||||
import rpc.protocols.MessageTypeProto;
|
import rpc.protocols.MessageTypeProto;
|
||||||
import rpc.protocols.PlayerInfoProto;
|
import rpc.protocols.PlayerInfoProto;
|
||||||
|
@ -30,14 +34,23 @@ public class HardStageReportRequsetHandler extends BaseHandler<PlayerInfoProto.H
|
||||||
PlayerInfoProto.HardStageReportResponse.Builder response = PlayerInfoProto.HardStageReportResponse.newBuilder();
|
PlayerInfoProto.HardStageReportResponse.Builder response = PlayerInfoProto.HardStageReportResponse.newBuilder();
|
||||||
//首次通关记录
|
//首次通关记录
|
||||||
ArenaRecord firstPassRecordRedis = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(id),ArenaRecord.class);
|
ArenaRecord firstPassRecordRedis = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(id),ArenaRecord.class);
|
||||||
GlobalSystemControl globalSystemControl = GlobalSystemControl.getGlobalSystemControl();
|
// 首次通关记录
|
||||||
|
Criteria criteria = new Criteria().andOperator(
|
||||||
|
Criteria.where("id").is("1_"+id)
|
||||||
|
);
|
||||||
|
Query query = new Query(criteria);
|
||||||
|
Criteria criteria2 = new Criteria().andOperator(
|
||||||
|
Criteria.where("id").is("2_"+id)
|
||||||
|
);
|
||||||
|
Query query2 = new Query(criteria2);
|
||||||
|
LjsdMongoTemplate ljsdMongoTemplate = MongoUtil.getLjsdMongoTemplate();
|
||||||
|
List<com.ljsd.jieling.logic.dao.root.ArenaRecord> firstPassRecord = ljsdMongoTemplate.findAllByCondition(query, com.ljsd.jieling.logic.dao.root.ArenaRecord.class);
|
||||||
if(firstPassRecordRedis != null){
|
if(firstPassRecordRedis != null){
|
||||||
CommonProto.HardStagePlayerInfo first = CBean2Proto.getHardStagePlayerInfo(firstPassRecordRedis,1,user);
|
CommonProto.HardStagePlayerInfo first = CBean2Proto.getHardStagePlayerInfo(firstPassRecordRedis,1,user);
|
||||||
response.addPlayer(first);
|
response.addPlayer(first);
|
||||||
}else{
|
}else{
|
||||||
ArenaRecord firstPassRecordMongo = globalSystemControl.getHardStageFirstRecord().get(id);
|
if(firstPassRecord!= null&&firstPassRecord.size()>0){
|
||||||
if(firstPassRecordMongo!= null){
|
CommonProto.HardStagePlayerInfo first = CBean2Proto.getHardStagePlayerInfo(firstPassRecord.get(0),1,user);
|
||||||
CommonProto.HardStagePlayerInfo first = CBean2Proto.getHardStagePlayerInfo(firstPassRecordMongo,1,user);
|
|
||||||
response.addPlayer(first);
|
response.addPlayer(first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,9 +60,9 @@ public class HardStageReportRequsetHandler extends BaseHandler<PlayerInfoProto.H
|
||||||
CommonProto.HardStagePlayerInfo min = CBean2Proto.getHardStagePlayerInfo(minForcePassRecordRedis,2,user);
|
CommonProto.HardStagePlayerInfo min = CBean2Proto.getHardStagePlayerInfo(minForcePassRecordRedis,2,user);
|
||||||
response.addPlayer(min);
|
response.addPlayer(min);
|
||||||
}else{
|
}else{
|
||||||
ArenaRecord minForcePassRecordMongo = globalSystemControl.getHardStageMinForceRecord().get(id);
|
List<com.ljsd.jieling.logic.dao.root.ArenaRecord> minForcePassRecordList = ljsdMongoTemplate.findAllByCondition(query2, com.ljsd.jieling.logic.dao.root.ArenaRecord.class);
|
||||||
if(minForcePassRecordMongo!=null){
|
if(minForcePassRecordList!=null&&minForcePassRecordList.size()>0){
|
||||||
CommonProto.HardStagePlayerInfo min = CBean2Proto.getHardStagePlayerInfo(minForcePassRecordMongo,2,user);
|
CommonProto.HardStagePlayerInfo min = CBean2Proto.getHardStagePlayerInfo(minForcePassRecordList.get(0),2,user);
|
||||||
response.addPlayer(min);
|
response.addPlayer(min);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package com.ljsd.jieling.handler.hardStage;
|
||||||
import com.ljsd.fight.CheckFight;
|
import com.ljsd.fight.CheckFight;
|
||||||
import com.ljsd.fight.FightType;
|
import com.ljsd.fight.FightType;
|
||||||
import com.ljsd.jieling.core.GlobalsDef;
|
import com.ljsd.jieling.core.GlobalsDef;
|
||||||
|
import com.ljsd.jieling.db.mongo.LjsdMongoTemplate;
|
||||||
|
import com.ljsd.jieling.db.mongo.MongoUtil;
|
||||||
import com.ljsd.jieling.db.redis.RedisKey;
|
import com.ljsd.jieling.db.redis.RedisKey;
|
||||||
import com.ljsd.jieling.db.redis.RedisUtil;
|
import com.ljsd.jieling.db.redis.RedisUtil;
|
||||||
import com.ljsd.jieling.exception.ErrorCode;
|
import com.ljsd.jieling.exception.ErrorCode;
|
||||||
|
@ -24,6 +26,7 @@ import com.ljsd.jieling.logic.fight.FightUtil;
|
||||||
import com.ljsd.jieling.logic.hardStage.HardStageChapter;
|
import com.ljsd.jieling.logic.hardStage.HardStageChapter;
|
||||||
import com.ljsd.jieling.logic.hardStage.HardStageLogic;
|
import com.ljsd.jieling.logic.hardStage.HardStageLogic;
|
||||||
import com.ljsd.jieling.logic.hardStage.HardStageNode;
|
import com.ljsd.jieling.logic.hardStage.HardStageNode;
|
||||||
|
import com.ljsd.jieling.logic.item.ItemLog;
|
||||||
import com.ljsd.jieling.logic.mission.GameEvent;
|
import com.ljsd.jieling.logic.mission.GameEvent;
|
||||||
import com.ljsd.jieling.network.session.ISession;
|
import com.ljsd.jieling.network.session.ISession;
|
||||||
import com.ljsd.jieling.util.FightDataUtil;
|
import com.ljsd.jieling.util.FightDataUtil;
|
||||||
|
@ -31,6 +34,8 @@ import com.ljsd.jieling.util.MessageUtil;
|
||||||
import com.ljsd.jieling.util.MonsterUtil;
|
import com.ljsd.jieling.util.MonsterUtil;
|
||||||
import config.SHardStage;
|
import config.SHardStage;
|
||||||
import org.luaj.vm2.LuaValue;
|
import org.luaj.vm2.LuaValue;
|
||||||
|
import org.springframework.data.mongodb.core.query.Criteria;
|
||||||
|
import org.springframework.data.mongodb.core.query.Query;
|
||||||
import rpc.protocols.*;
|
import rpc.protocols.*;
|
||||||
import com.ljsd.fight.ArenaRecord;
|
import com.ljsd.fight.ArenaRecord;
|
||||||
import com.ljsd.jieling.util.*;
|
import com.ljsd.jieling.util.*;
|
||||||
|
@ -152,11 +157,23 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
||||||
//战斗回放
|
//战斗回放
|
||||||
int force = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false);
|
int force = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false);
|
||||||
// 首次通关记录
|
// 首次通关记录
|
||||||
//ArenaRecord firstPassRecord = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(nodeId), ArenaRecord.class);
|
/* Criteria criteria = new Criteria().andOperator(
|
||||||
GlobalSystemControl globalSystemControl = GlobalSystemControl.getGlobalSystemControl();
|
Criteria.where("id").is("1_"+nodeId)
|
||||||
if (!globalSystemControl.getHardStageFirstRecord().containsKey(nodeId)) {
|
);
|
||||||
ArenaRecord arenaRecord = new ArenaRecord();
|
Query query = new Query(criteria);
|
||||||
arenaRecord.setId(String.valueOf(nodeId));
|
|
||||||
|
Criteria criteria2 = new Criteria().andOperator(
|
||||||
|
Criteria.where("id").is("2_"+ nodeId)
|
||||||
|
);
|
||||||
|
Query query2 = new Query(criteria2);*/
|
||||||
|
LjsdMongoTemplate ljsdMongoTemplate = MongoUtil.getLjsdMongoTemplate();
|
||||||
|
com.ljsd.jieling.logic.dao.root.ArenaRecord firstPassRecord = ljsdMongoTemplate.findById(com.ljsd.jieling.logic.dao.root.ArenaRecord._COLLECTION_NAME,"1_"+nodeId, com.ljsd.jieling.logic.dao.root.ArenaRecord.class);
|
||||||
|
com.ljsd.jieling.logic.dao.root.ArenaRecord minForcePassRecordList = ljsdMongoTemplate.findById(com.ljsd.jieling.logic.dao.root.ArenaRecord._COLLECTION_NAME,"2_"+nodeId, com.ljsd.jieling.logic.dao.root.ArenaRecord.class);
|
||||||
|
if(firstPassRecord == null ){
|
||||||
|
com.ljsd.jieling.logic.dao.root.ArenaRecord arenaRecord = new com.ljsd.jieling.logic.dao.root.ArenaRecord();
|
||||||
|
arenaRecord.setId("1_"+ nodeId);
|
||||||
|
arenaRecord.setType(1);
|
||||||
|
arenaRecord.setStageId(nodeId);
|
||||||
arenaRecord.setCreateTime(TimeUtils.nowInt());
|
arenaRecord.setCreateTime(TimeUtils.nowInt());
|
||||||
arenaRecord.setAttackId(user.getId());
|
arenaRecord.setAttackId(user.getId());
|
||||||
arenaRecord.setLevel(user.getPlayerInfoManager().getLevel());
|
arenaRecord.setLevel(user.getPlayerInfoManager().getLevel());
|
||||||
|
@ -165,27 +182,34 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
||||||
arenaRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());
|
arenaRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());
|
||||||
arenaRecord.setFightData(fightData.toByteArray());
|
arenaRecord.setFightData(fightData.toByteArray());
|
||||||
arenaRecord.setAttackForce(force);
|
arenaRecord.setAttackForce(force);
|
||||||
globalSystemControl.addHardStageFirstRecord(nodeId,arenaRecord);
|
ljsdMongoTemplate.save(user.getId(),arenaRecord);
|
||||||
//RedisUtil.getInstence().set(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(nodeId), arenaRecord);
|
}
|
||||||
GlobalSystemControl.save(globalSystemControl);
|
if(minForcePassRecordList == null){
|
||||||
|
com.ljsd.jieling.logic.dao.root.ArenaRecord minForcePassRecord = new com.ljsd.jieling.logic.dao.root.ArenaRecord();
|
||||||
|
minForcePassRecord.setId("2_"+ nodeId);
|
||||||
|
minForcePassRecord.setType(2);
|
||||||
|
minForcePassRecord.setStageId(nodeId);
|
||||||
|
minForcePassRecord.setCreateTime(TimeUtils.nowInt());
|
||||||
|
minForcePassRecord.setAttackId(user.getId());
|
||||||
|
minForcePassRecord.setLevel(user.getPlayerInfoManager().getLevel());
|
||||||
|
minForcePassRecord.setHead(user.getPlayerInfoManager().getHead());
|
||||||
|
minForcePassRecord.setUserName(user.getPlayerInfoManager().getNickName());
|
||||||
|
minForcePassRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());
|
||||||
|
minForcePassRecord.setFightData(fightData.toByteArray());
|
||||||
|
minForcePassRecord.setAttackForce(force);
|
||||||
|
ljsdMongoTemplate.save(user.getId(),minForcePassRecord);
|
||||||
|
}else {
|
||||||
|
if(force<minForcePassRecordList.getAttackForce()){
|
||||||
|
minForcePassRecordList.setCreateTime(TimeUtils.nowInt());
|
||||||
|
minForcePassRecordList.setAttackId(user.getId());
|
||||||
|
minForcePassRecordList.setLevel(user.getPlayerInfoManager().getLevel());
|
||||||
|
minForcePassRecordList.setHead(user.getPlayerInfoManager().getHead());
|
||||||
|
minForcePassRecordList.setUserName(user.getPlayerInfoManager().getNickName());
|
||||||
|
minForcePassRecordList.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());
|
||||||
|
minForcePassRecordList.setFightData(fightData.toByteArray());
|
||||||
|
minForcePassRecordList.setAttackForce(force);
|
||||||
|
ljsdMongoTemplate.save(user.getId(),minForcePassRecordList);
|
||||||
}
|
}
|
||||||
// 最低战力通关记录记录
|
|
||||||
//ArenaRecord minForcePassRecord = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_PASS_MIN_FORCE, String.valueOf(nodeId), ArenaRecord.class);
|
|
||||||
ArenaRecord minForcePassRecord = globalSystemControl.getHardStageMinForceRecord().get(nodeId);
|
|
||||||
if (minForcePassRecord == null || force < minForcePassRecord.getAttackForce()) {
|
|
||||||
ArenaRecord arenaRecord = new ArenaRecord();
|
|
||||||
arenaRecord.setId(String.valueOf(nodeId));
|
|
||||||
arenaRecord.setCreateTime(TimeUtils.nowInt());
|
|
||||||
arenaRecord.setAttackId(user.getId());
|
|
||||||
arenaRecord.setLevel(user.getPlayerInfoManager().getLevel());
|
|
||||||
arenaRecord.setHead(user.getPlayerInfoManager().getHead());
|
|
||||||
arenaRecord.setUserName(user.getPlayerInfoManager().getNickName());
|
|
||||||
arenaRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());
|
|
||||||
arenaRecord.setFightData(fightData.toByteArray());
|
|
||||||
arenaRecord.setAttackForce(force);
|
|
||||||
//RedisUtil.getInstence().set(RedisKey.HARD_STAGE_PASS_MIN_FORCE, String.valueOf(nodeId), arenaRecord);
|
|
||||||
globalSystemControl.addHardStageMinForceRecord(nodeId,arenaRecord);
|
|
||||||
GlobalSystemControl.save(globalSystemControl);
|
|
||||||
}
|
}
|
||||||
//排行榜星级
|
//排行榜星级
|
||||||
int starSum = HardStageLogic.getHardStageStarsSum(user);
|
int starSum = HardStageLogic.getHardStageStarsSum(user);
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
package com.ljsd.jieling.logic.dao.root;
|
||||||
|
|
||||||
|
import com.ljsd.common.mogodb.MongoBase;
|
||||||
|
import com.ljsd.common.mogodb.MongoUpdateCacheThreadLocal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 战斗记录
|
||||||
|
*/
|
||||||
|
public class ArenaRecord extends MongoBase {
|
||||||
|
public static final String _COLLECTION_NAME = "arenaRecord";
|
||||||
|
private String id;
|
||||||
|
private int type;//关卡类型
|
||||||
|
private int stageId; //关卡id
|
||||||
|
private int createTime;
|
||||||
|
private int attackId; //进攻者
|
||||||
|
private int level;
|
||||||
|
private int head;
|
||||||
|
private String userName;
|
||||||
|
private int headFrame;//头像框
|
||||||
|
private byte[] fightData;
|
||||||
|
private int attackForce; //战力
|
||||||
|
|
||||||
|
public ArenaRecord() {
|
||||||
|
setRootCollection(_COLLECTION_NAME);
|
||||||
|
this.init(0,"");
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStageId() {
|
||||||
|
return stageId;
|
||||||
|
}
|
||||||
|
public void setStageId(int stageId) {
|
||||||
|
this.stageId = stageId;
|
||||||
|
updateString("stageId",stageId);
|
||||||
|
}
|
||||||
|
public int getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
public void setType(int type) {
|
||||||
|
this.type = type;
|
||||||
|
updateString("type",type);
|
||||||
|
}
|
||||||
|
public int getCreateTime() {
|
||||||
|
return createTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreateTime(int createTime) {
|
||||||
|
this.createTime = createTime;
|
||||||
|
updateString("createTime",createTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAttackId() {
|
||||||
|
return attackId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttackId(int attackId) {
|
||||||
|
this.attackId = attackId;
|
||||||
|
updateString("attackId",attackId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLevel() {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLevel(int level) {
|
||||||
|
this.level = level;
|
||||||
|
updateString("level",level);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHead() {
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHead(int head) {
|
||||||
|
this.head = head;
|
||||||
|
updateString("head",head);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserName(String userName) {
|
||||||
|
this.userName = userName;
|
||||||
|
updateString("userName",userName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHeadFrame() {
|
||||||
|
return headFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeadFrame(int headFrame) {
|
||||||
|
this.headFrame = headFrame;
|
||||||
|
updateString("headFrame",headFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getFightData() {
|
||||||
|
return fightData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFightData(byte[] fightData) {
|
||||||
|
this.fightData = fightData;
|
||||||
|
updateString("fightData",fightData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAttackForce() {
|
||||||
|
return attackForce;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttackForce(int attackForce) {
|
||||||
|
this.attackForce = attackForce;
|
||||||
|
updateString("attackForce",attackForce);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
updateString("id",id);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1092,6 +1092,17 @@ public class CBean2Proto {
|
||||||
return CommonProto.TeamSimpleInfo.newBuilder().setHeroid(pokemon.getId()).setHeroTid(pokemon.getTmpId()).setLevel(pokemon.getLevel()).setStar(pokemon.getStar()).setPosition(position).build();
|
return CommonProto.TeamSimpleInfo.newBuilder().setHeroid(pokemon.getId()).setHeroTid(pokemon.getTmpId()).setLevel(pokemon.getLevel()).setStar(pokemon.getStar()).setPosition(position).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static CommonProto.HardStagePlayerInfo getHardStagePlayerInfo(com.ljsd.jieling.logic.dao.root.ArenaRecord arenaRecord,int type,User user)throws Exception {
|
||||||
|
CommonProto.FightData fightDataProto = CommonProto.FightData.parseFrom(arenaRecord.getFightData());
|
||||||
|
return CommonProto.HardStagePlayerInfo.newBuilder()
|
||||||
|
.setUid(arenaRecord.getAttackId())
|
||||||
|
.setLevel(arenaRecord.getLevel())
|
||||||
|
.setHead(arenaRecord.getHead())
|
||||||
|
.setUserName(arenaRecord.getUserName())
|
||||||
|
.setHeadFrame(arenaRecord.getHeadFrame())
|
||||||
|
.setFightData(fightDataProto).setPower(arenaRecord.getAttackForce()).setType(type).setPracticeLevel(user.getHeroManager().getPracticeLevel()).build();
|
||||||
|
|
||||||
|
}
|
||||||
public static CommonProto.HardStagePlayerInfo getHardStagePlayerInfo(ArenaRecord arenaRecord,int type,User user)throws Exception {
|
public static CommonProto.HardStagePlayerInfo getHardStagePlayerInfo(ArenaRecord arenaRecord,int type,User user)throws Exception {
|
||||||
CommonProto.FightData fightDataProto = CommonProto.FightData.parseFrom(arenaRecord.getFightData());
|
CommonProto.FightData fightDataProto = CommonProto.FightData.parseFrom(arenaRecord.getFightData());
|
||||||
return CommonProto.HardStagePlayerInfo.newBuilder()
|
return CommonProto.HardStagePlayerInfo.newBuilder()
|
||||||
|
@ -1103,6 +1114,7 @@ public class CBean2Proto {
|
||||||
.setFightData(fightDataProto).setPower(arenaRecord.getAttackForce()).setType(type).setPracticeLevel(user.getHeroManager().getPracticeLevel()).build();
|
.setFightData(fightDataProto).setPower(arenaRecord.getAttackForce()).setType(type).setPracticeLevel(user.getHeroManager().getPracticeLevel()).build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取紫府神印list by proto
|
* 获取紫府神印list by proto
|
||||||
* @param user
|
* @param user
|
||||||
|
|
Loading…
Reference in New Issue