公会技能长按修改
parent
b37c3146c9
commit
de1cc036ee
|
@ -22,6 +22,6 @@ public class GuildSkillLevelUpHandler extends BaseHandler<Family.GuildSkillLevel
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processWithProto(ISession iSession, Family.GuildSkillLevelUpRequest proto) throws Exception {
|
public void processWithProto(ISession iSession, Family.GuildSkillLevelUpRequest proto) throws Exception {
|
||||||
GuildLogic.guildSkillLevelUp(iSession,proto.getType(), MessageTypeProto.MessageType.GUILD_SKILL_LEVEL_UP_RESPONSE);
|
GuildLogic.guildSkillLevelUp(iSession,proto.getType(),proto.getBeforeLevel(),proto.getAfterLevel(), MessageTypeProto.MessageType.GUILD_SKILL_LEVEL_UP_RESPONSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,9 +190,9 @@ public class GuildMyInfo extends MongoBase {
|
||||||
return guildSkill;
|
return guildSkill;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addGuildSkillByType(int type){
|
|
||||||
guildSkill.putIfAbsent(type, 0);
|
public void setGuildSkillByType(int type,int level){
|
||||||
guildSkill.put(type,guildSkill.get(type)+1);
|
guildSkill.put(type,level);
|
||||||
updateString("guildSkill",guildSkill);
|
updateString("guildSkill",guildSkill);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1328,30 +1328,63 @@ public class GuildLogic {
|
||||||
* @param type
|
* @param type
|
||||||
* @param messageType
|
* @param messageType
|
||||||
*/
|
*/
|
||||||
public static void guildSkillLevelUp(ISession session, int type,MessageTypeProto.MessageType messageType) throws Exception {
|
public static void guildSkillLevelUp(ISession session, int type,int beforeLevel,int afterLevel,MessageTypeProto.MessageType messageType) throws Exception {
|
||||||
User user = UserManager.getUser(session.getUid());
|
User user = UserManager.getUser(session.getUid());
|
||||||
//todo 消耗校验
|
//todo 消耗校验
|
||||||
Map<Integer, Integer> skillInfo= user.getGuildMyInfo().getGuildSkill();
|
Map<Integer, Integer> skillInfo= user.getGuildMyInfo().getGuildSkill();
|
||||||
|
|
||||||
Map<Integer, Map<Integer, SGuildTechnology>> typeMap = SGuildTechnology.technologyMap.get(type);
|
Map<Integer, Map<Integer, SGuildTechnology>> typeMap = SGuildTechnology.technologyMap.get(type);
|
||||||
|
if(skillInfo.getOrDefault(type, 0)!=beforeLevel||afterLevel>600)
|
||||||
|
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||||
int size = typeMap.size();
|
int size = typeMap.size();
|
||||||
int[][] consume;
|
|
||||||
if(!skillInfo.containsKey(type)){
|
|
||||||
consume = typeMap.get(1).get(0).getConsume();
|
Map<Integer,Integer> consumeMap = new HashMap<>(2);
|
||||||
}else{
|
int baseLevel = beforeLevel / size;//100->16
|
||||||
int level = skillInfo.get(type);
|
int nextIndex = beforeLevel % size;//100->4
|
||||||
consume = typeMap.get(level%size+1).get(level/size).getConsume();
|
|
||||||
if(typeMap.get(level%size+1).get(level/size+1)==null){
|
int afterBaseLevel =afterLevel / size;
|
||||||
throw new ErrorCodeException(ErrorCode.HERO_LEVE_MAX);
|
int afterNextIndex = afterLevel % size;
|
||||||
|
// if(){
|
||||||
|
// }else{
|
||||||
|
// int level = skillInfo.get(type);
|
||||||
|
// consume = typeMap.get(level%size+1).get(level/size).getConsume();
|
||||||
|
// if(typeMap.get(level%size+1).get(level/size+1)==null){
|
||||||
|
// throw new ErrorCodeException(ErrorCode.HERO_LEVE_MAX);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
while(baseLevel<afterBaseLevel || nextIndex<afterNextIndex){
|
||||||
|
|
||||||
|
int[][] consume = typeMap.get(nextIndex+1).get(baseLevel).getConsume();
|
||||||
|
for(int[] consumeOnce:consume) {
|
||||||
|
consumeMap.put(consumeOnce[0],consumeMap.getOrDefault(consumeOnce[0],0)+consumeOnce[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ItemUtil.checkCost(user, consumeMap)){
|
||||||
|
//把这一次的减回去
|
||||||
|
for(int[] consumeOnce:consume) {
|
||||||
|
consumeMap.put(consumeOnce[0],consumeMap.getOrDefault(consumeOnce[0],0)-consumeOnce[1]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(nextIndex+1==size){
|
||||||
|
nextIndex=0;
|
||||||
|
baseLevel++;
|
||||||
|
}else{
|
||||||
|
nextIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boolean itemCost = ItemUtil.itemCost(user, consume, BIReason.GUILD_SKILL_LEVEL_UP_CONSUME, 1);
|
boolean itemCost = ItemUtil.itemCost(user, ItemUtil.mapToArray(consumeMap), BIReason.GUILD_SKILL_LEVEL_UP_CONSUME, 1);
|
||||||
|
|
||||||
if(!itemCost){
|
if(!itemCost){
|
||||||
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
|
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
user.getGuildMyInfo().addGuildSkillByType(type);
|
Family.GuildSkillLevelUpResponse response = Family.GuildSkillLevelUpResponse.newBuilder().setType(type).setCurlevel(baseLevel*size+nextIndex).build();
|
||||||
|
|
||||||
|
user.getGuildMyInfo().setGuildSkillByType(type,baseLevel*size+nextIndex);
|
||||||
|
// user.getGuildMyInfo().setGuildSkillByType(type,590);
|
||||||
|
|
||||||
Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid()));
|
Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid()));
|
||||||
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
|
MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue