back_recharge
jiahuiwen 2019-04-02 15:51:58 +08:00
commit 319a31df60
3 changed files with 42 additions and 20 deletions

View File

@ -17,7 +17,7 @@ public class EquipWearHandler extends BaseHandler{
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
HeroInfoProto.EquipWearRequest equipWearRequest = HeroInfoProto.EquipWearRequest.parseFrom(netData.parseClientProtoNetData());
HeroLogic.getInstance().wearEquipOpt(iSession,equipWearRequest.getHeroId(),equipWearRequest.getEquipId());
HeroLogic.getInstance().wearEquipOpt(iSession,equipWearRequest.getHeroId(),equipWearRequest.getEquipIdList());
}
}

View File

@ -160,6 +160,11 @@ public class Hero extends MongoBase {
this.equipByPositionMap.put(position,equipId);
}
public void updateMutliEquipPositionMap(Map<Integer,String> equipByPositionMapTmp) throws Exception {
this.equipByPositionMap.putAll(equipByPositionMapTmp);
updateString("equipByPositionMap" ,equipByPositionMap);
}
public void removeEquip(int position){
String value = this.equipByPositionMap.get(position);
if (value!=null){

View File

@ -792,33 +792,50 @@ public class HeroLogic {
}
}
public boolean checkEquipForWear(Hero hero,EquipManager equipManager,List<String> equipIds, Map<Integer,String> equipInfos ){
if(equipIds == null || equipIds.isEmpty()){
return false;
}
Map<String, Equip> equipMap = equipManager.getEquipMap();
for(String equipId : equipIds){
Equip equip =equipMap.get(equipId);
if( null == equip || null == hero ){
return false;
}
if(!StringUtil.isEmpty(equip.getHeroId())){
return false;
}
int equipIdTid = equip.getEquipId();
SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equipIdTid);
int position = sEquipConfig.getPosition();
int professionLimit = sEquipConfig.getProfessionLimit();
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
if(professionLimit!=0 && scHero.getProfession()!= professionLimit){
return false;
}
equipInfos.put(position,equipId);
}
if(equipInfos.size()!=equipIds.size()){
return false;
}
return true;
}
// equip TODO 装备会导致英雄属性发生变化
public void wearEquipOpt(ISession session,String heroId,String equipId) throws Exception {
public void wearEquipOpt(ISession session,String heroId,List<String> equipIds) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
Hero hero = user.getHeroManager().getHero(heroId);
Equip equip = user.getEquipManager().getEquipMap().get(equipId);
if( null == equip || null == hero ){
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,"");
return;
}
if(!StringUtil.isEmpty(equip.getHeroId())){
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,"");
return;
}
int equipIdTid = equip.getEquipId();
SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equipIdTid);
int position = sEquipConfig.getPosition();
int professionLimit = sEquipConfig.getProfessionLimit();
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
if(professionLimit!=0 && scHero.getProfession()!= professionLimit){
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,"");
Hero hero = user.getHeroManager().getHeroMap().get(heroId);
Map<Integer,String> equipInfoTmp = new HashMap<>(6);
if(!checkEquipForWear(hero,user.getEquipManager(),equipIds,equipInfoTmp)){
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,"equip.wrong");
return;
}
hero.updateEquipPositionMap(position,equipId);
hero.updateMutliEquipPositionMap(equipInfoTmp);
LOGGER.info("the heroTid={},the force={}",hero.getTemplateId(),calHeoForce(user,hero));