diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java index bb5402d67..5aabbbd94 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java @@ -104,6 +104,8 @@ public class SGameSetting implements BaseConfig { private int maxEnergyGet; + private int adventureItem; + private static SGameSetting gameSetting; @@ -307,4 +309,8 @@ public class SGameSetting implements BaseConfig { public int getMaxEnergyGet() { return maxEnergyGet; } + + public int getAdventureItem() { + return adventureItem; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index e115ea74d..98a8fb4c3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -70,6 +70,8 @@ public interface BIReason { int SUDDENLY_REWARD = 43; // 精英怪奖励 + int FIRST_ADVENTURE_REWARD = 44; // 秘境首次奖励外敌挑战券 + //道具消耗原因 1000开头 int ADVENTURE_UPLEVEL_CONSUME = 1000; //秘境升级 int SECRETBOX_CONSUME = 1001; //秘盒抽卡 @@ -120,4 +122,6 @@ public interface BIReason { int CREATE_GUILD_CONSUME = 1030; // 创建宗门消耗 int ENDLESS_CONSUME_EXECUTION = 1031; //无尽副本消耗行动力 + int ADVENTURE_CALL_BOSS_CONSUME = 1032; //召唤外敌消耗 + } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java index 55ba072ac..677b65280 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java @@ -3,7 +3,6 @@ package com.ljsd.jieling.handler.GameGM; import com.ljsd.GameApplication; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; -import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.GlobalGm; @@ -206,7 +205,7 @@ public class GMRequestHandler extends BaseHandler{ PlayerLogic.getInstance().resetUserName(iSession,prarm3,1,0); break; case GlobalGm.CREATE_INVADE: - CombatLogic.getInstance().randomInvasionBoss(iSession.getUid(),prarm1,100,true); + CombatLogic.getInstance().callInvasionBoss(iSession,true); break; case GlobalGm.SET_TOWER_NUMBER: MapLogic.getInstance().setTower(iSession.getUid(),prarm1); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureFlushBossHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureCallBossHandler.java similarity index 72% rename from serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureFlushBossHandler.java rename to serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureCallBossHandler.java index 207720c47..cb5362c82 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureFlushBossHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureCallBossHandler.java @@ -8,14 +8,14 @@ import com.ljsd.jieling.protocols.MessageTypeProto; import org.springframework.stereotype.Component; @Component -public class AdventureFlushBossHandler extends BaseHandler { +public class AdventureCallBossHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { - return MessageTypeProto.MessageType.ADVENTURE_FLUSH_BOSS_REQUEST; + return MessageTypeProto.MessageType.ADVENTURE_CALL_BOSS_REQUEST; } @Override public void process(ISession iSession, PacketNetData netData) throws Exception { - CombatLogic.getInstance().flushArenaBoss(iSession); + CombatLogic.getInstance().callInvasionBoss(iSession,false); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java index b9b425c34..b9825b1d1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java @@ -4,15 +4,16 @@ import com.ljsd.common.mogodb.MongoBase; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.util.TimeUtils; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class AdventureStateInfo extends MongoBase { private int position; private int startTime; private int level; - private String bossId; // boss唯一标识 - private int bossGroupId; - private int findBossTime; + + private Set bossIds = new HashSet<>(); public AdventureStateInfo(){ this.setRootCollection(User._COLLECTION_NAME); } @@ -22,7 +23,7 @@ public class AdventureStateInfo extends MongoBase { this.position = position; this.level=1; this.startTime = now; - this.findBossTime = now; + bossIds = new HashSet<>(); } public int getStartTime() { @@ -33,6 +34,10 @@ public class AdventureStateInfo extends MongoBase { return position; } + public Set getBossIds() { + return bossIds; + } + public void setStartTime(int startTime) { updateString("startTime",startTime); this.startTime = startTime; @@ -47,31 +52,18 @@ public class AdventureStateInfo extends MongoBase { this.level = level; } - public int getBossGroupId() { - return bossGroupId; + public void addBossGroup(String bossId){ + bossIds.add(bossId); + updateString("bossIds",bossIds); } - public void setBossGroupId(int bossGroupId) { - updateString("bossGroupId",bossGroupId); - this.bossGroupId = bossGroupId; + public void removeBossGroup(String bossId){ + bossIds.remove(bossId); + updateString("bossIds",bossIds); + } + public void removeMutBossGroup(Set bossIds){ + bossIds.removeAll(bossIds); + updateString("bossIds",bossIds); } - public int getFindBossTime() { - return findBossTime; - } - - public void setFindBossTime(int findBossTime) { - updateString("findBossTime",findBossTime); - this.findBossTime = findBossTime; - } - - - public String getBossId() { - return bossId; - } - - public void setBossId(String bossId) { - updateString("bossId",bossId); - this.bossId = bossId; - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index dbdef73e8..7a068616c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -160,102 +160,12 @@ public class CombatLogic { int uid = session.getUid(); User user = UserManager.getUser(uid); AdventureManager adventureManager = user.getAdventureManager(); - FightInfoProto.GetAdventureStateInfoResponse.Builder builder = FightInfoProto.GetAdventureStateInfoResponse.newBuilder(); Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - int flushBossNextTime=-1; - if(!adventureStateInfoMap.isEmpty()){ - flushBossNextTime = getFlushBossNextTime(uid, null,builder, adventureStateInfoMap); - } + FightInfoProto.GetAdventureStateInfoResponse adventureStateInfoResponse = CBean2Proto.getAdventureStateInfoResponse(adventureStateInfoMap); OnlineUserManager.orderAdventureUids.add(uid); - builder.setNextBossFlushTime(flushBossNextTime); - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_INFO_RESPONSE_VALUE,builder.build(),true); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_INFO_RESPONSE_VALUE,adventureStateInfoResponse,true); } - public void flushArenaBoss(ISession session) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - - AdventureManager adventureManager = user.getAdventureManager(); - FightInfoProto.AdventureBossFlushResponse.Builder builder = FightInfoProto.AdventureBossFlushResponse.newBuilder(); - Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - int flushBossNextTime=-1; - if(!adventureStateInfoMap.isEmpty()){ - flushBossNextTime = getFlushBossNextTime(uid, builder,null, adventureStateInfoMap); - } - builder.setNextFlushTime(flushBossNextTime); - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_FLUSH_BOSS_RESPONSE_VALUE,builder.build(),true); - } - - private int getFlushBossNextTime(int uid, FightInfoProto.AdventureBossFlushResponse.Builder flushBuilder, FightInfoProto.GetAdventureStateInfoResponse.Builder getStatebuilder, Map adventureStateInfoMap) throws Exception { - long nowMs = TimeUtils.now(); - int now = (int)(nowMs/1000); - int flushBossNextTime = -1; - for(AdventureStateInfo adventureStateInfo : adventureStateInfoMap.values()){ - CommonProto.AdventureStateInfo.Builder builder1 = CommonProto.AdventureStateInfo.newBuilder() - .setPositionId(adventureStateInfo.getPosition()) - .setLevel(adventureStateInfo.getLevel()) - .setStateTime(now-adventureStateInfo.getStartTime()); - SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(adventureStateInfo.getPosition()); - int nextFlushTime = sAdventureConfig.getInvasionBossRefresh(); - int findBossTime = adventureStateInfo.getFindBossTime(); - int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - findBossTime); - boolean need = false; - int randomTimes =0; - if(StringUtil.isEmpty(adventureStateInfo.getBossId())){ - if(now-adventureStateInfo.getStartTime()>nextFlushTime){ - randomTimes = (now-adventureStateInfo.getStartTime())/nextFlushTime; - }else{ - nextFlushTime = nextFlushTime -(now-adventureStateInfo.getStartTime()); - } - }else{ - if(remainTime>0){ - AdventureBoss adventureBoss = RedisUtil.getInstence().getMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO, "", adventureStateInfo.getBossId(), AdventureBoss.class); - need= true; - if(adventureBoss == null){ - randomTimes = 1; - remainTime=0; - need=false; - } - - }else{ - if(remainTime+nextFlushTime<0){ - randomTimes = (now-findBossTime-sAdventureConfig.getInvasionBossHolding())/nextFlushTime; - remainTime=0; - }else{ - nextFlushTime = remainTime+nextFlushTime; - } - } - - } - if(randomTimes>0){ - int bossGroupId = randomInvasionBoss(uid, adventureStateInfo.getPosition(),randomTimes,false); - if(bossGroupId>0){ - remainTime =sAdventureConfig.getInvasionBossHolding()-(now-adventureStateInfo.getFindBossTime()); - nextFlushTime+=remainTime+nextFlushTime; - need=true; - } - } - if(need){ - CommonProto.AdventureBossSimpleInfo build = CommonProto.AdventureBossSimpleInfo.newBuilder().setArenaId(adventureStateInfo.getPosition()) - .setBossGroupId(adventureStateInfo.getBossGroupId()) - .setRemainTime(remainTime) - .build(); - if(flushBuilder!=null){ - flushBuilder.setAdventureBossSimpleInfo(build); - }else{ - builder1.setAdventureBossSimpleInfo(build); - } - } - if(getStatebuilder!=null){ - getStatebuilder.addAdventureStateInfoList(builder1); - } - - if(flushBossNextTime == -1 || flushBossNextTime>nextFlushTime){ - flushBossNextTime = nextFlushTime; - } - } - return flushBossNextTime; - } //挑战首次 public void adventureChallenge(ISession iSession,int arenaId,int teamId,int skipFight) throws Exception { @@ -294,6 +204,11 @@ public class CombatLogic { int fightResult = checkResult[0]; if(fightResult == 1){ adventureManager.addAdventureStation(new AdventureStateInfo(arenaId)); + int[][] drop= new int[1][]; + drop[0] = new int[2]; + drop[0][0]=SGameSetting.getGameSetting().getAdventureItem(); + drop[0][1] = 1; + ItemUtil.drop(user,drop,BIReason.FIRST_ADVENTURE_REWARD); } FightInfoProto.AdventurnChallengeResponse.Builder builder = FightInfoProto.AdventurnChallengeResponse.newBuilder().setFightResult(fightResult); @@ -304,7 +219,6 @@ public class CombatLogic { .addAllMonsterList(monsterGroupList) .build(); builder.setFightData(fightData); - MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.ADVENTURE_CHALLENGE_RESPONSE_VALUE,builder.build(),true); } @@ -558,26 +472,46 @@ public class CombatLogic { MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_BOSSHURT_RESPONSE_VALUE,builder.build(),true); } - public int randomInvasionBoss(int uid,int arenaID,int randomTimes,boolean isGm) throws Exception { - LOGGER.info("the uid={},the arenaId={},the times={}",uid,arenaID,randomTimes); + public void callInvasionBoss(ISession iSession, boolean isGm) throws Exception { + int uid = iSession.getUid(); User user = UserManager.getUser(uid); AdventureManager adventureManager = user.getAdventureManager(); Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); + int arenaID = 0; + for(Integer tmpArenaId : adventureStateInfoMap.keySet()){ + if(arenaID3){ - reallyRandomTimes=3; - } - while (reallyRandomTimes-->0 && bossGroupID==0){ + while (bossGroupID==0){ int randomInt = MathUtils.randomInt(totalWeight); for(int[] item :invasionBossWeightInfo){ randomInt-=item[1]; @@ -587,36 +521,26 @@ public class CombatLogic { } } } - int findBossTime = adventureStateInfo.getFindBossTime(); int now = (int)(System.currentTimeMillis()/1000); - if(isGm || bossGroupID == 0 || findBossTime == 0){ - - }else{ - int nextFindTime = findBossTime + sAdventureConfig.getInvasionBossRefresh() * (randomTimes - reallyRandomTimes); - if(nextFindTime>now || (now - nextFindTime) > sAdventureConfig.getInvasionBossHolding() ){ - - }else{ - now=nextFindTime; - } + String bossId = KeyGenUtils.produceIdByModule(UUIDEnum.ADVENTUREBOSS, user.getId()); + Map> monsterHpByGroup = MonsterUtil.getMonsterHpByGroup(bossGroupID); + List hps = monsterHpByGroup.get(0); + int totalHp = 0; + for(Integer hp: hps){ + totalHp+=hp; } - String bossId=""; - if(bossGroupID != 0){ - bossId = KeyGenUtils.produceIdByModule(UUIDEnum.ADVENTUREBOSS, user.getId()); - Map> monsterHpByGroup = MonsterUtil.getMonsterHpByGroup(bossGroupID); - List hps = monsterHpByGroup.get(0); - int totalHp = 0; - for(Integer hp: hps){ - totalHp+=hp; - } - AdventureBoss adventureBoss = new AdventureBoss(bossId,bossGroupID,arenaID,levle,uid,now,totalHp,hps); - RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO,"",bossId,adventureBoss); - RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_OWN,Integer.toString(uid),bossId,0); - MessageUtil.sendRedIndication(uid,GlobalsDef.SHARE_BOSS_RED_TYPE); - } - adventureStateInfo.setBossId(bossId); - adventureStateInfo.setBossGroupId(bossGroupID); - adventureStateInfo.setFindBossTime(now); - return bossGroupID; + AdventureBoss adventureBoss = new AdventureBoss(bossId,bossGroupID,arenaID,level,uid,now,totalHp,hps); + RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO,"",bossId,adventureBoss); + RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_OWN,Integer.toString(uid),bossId,0); + MessageUtil.sendRedIndication(uid,GlobalsDef.SHARE_BOSS_RED_TYPE); + adventureStateInfo.addBossGroup(bossId); + int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - adventureBoss.getFindTime()); + FightInfoProto.AdventureCallBossResponse build = FightInfoProto.AdventureCallBossResponse.newBuilder().setAdventureBossInfo(CommonProto.AdventureBossSimpleInfo.newBuilder() + .setArenaId(adventureStateInfo.getPosition()) + .setBossGroupId(adventureBoss.getBossGroupId()) + .setRemainTime(remainTime) + .build()).build(); + MessageUtil.sendMessage(iSession,1,msgId,build,true); } public void leftAdventurePos(ISession session,int type){ @@ -735,7 +659,8 @@ public class CombatLogic { if(adventureBoss.getFindUserId()!=uid){ ISession findSession = OnlineUserManager.getSessionByUid(adventureBoss.getFindUserId()); if(findSession!=null){ - MessageUtil.sendIndicationMessage(findSession,1, MessageTypeProto.MessageType.ADVENTURE_BOSS_REFRESH_INDICATION_VALUE,null,true); + FightInfoProto.AdventureBossKillIndication bossKilled = FightInfoProto.AdventureBossKillIndication.newBuilder().setBossId(adventureBoss.getBossId()).setPos(adventureBoss.getArenaId()).build(); + MessageUtil.sendIndicationMessage(findSession,1, MessageTypeProto.MessageType.ADVENTURE_BOSS_KILL_INDICATION_VALUE,bossKilled,true); } } break; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index 7fdfbd239..1acbaf590 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -1,7 +1,10 @@ package com.ljsd.jieling.util; +import com.ljsd.jieling.config.SAdventureConfig; import com.ljsd.jieling.config.SGameSetting; import com.ljsd.jieling.config.SMonsterConfig; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.map.Cell; import com.ljsd.jieling.handler.map.MapManager; @@ -11,10 +14,7 @@ import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.GuildInfo; import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.protocols.ChatProto; -import com.ljsd.jieling.protocols.CommonProto; -import com.ljsd.jieling.protocols.Family; -import com.ljsd.jieling.protocols.MapInfoProto; +import com.ljsd.jieling.protocols.*; import java.util.*; @@ -401,4 +401,43 @@ public class CBean2Proto { .setName(user.getPlayerInfoManager().getNickName()) .build(); } + + public static FightInfoProto.GetAdventureStateInfoResponse getAdventureStateInfoResponse(Map adventureStateInfoMap){ + FightInfoProto.GetAdventureStateInfoResponse.Builder builder = FightInfoProto.GetAdventureStateInfoResponse.newBuilder(); + long nowMs = TimeUtils.now(); + int now = (int)(nowMs/1000); + for(AdventureStateInfo adventureStateInfo : adventureStateInfoMap.values()){ + CommonProto.AdventureStateInfo.Builder builder1 = CommonProto.AdventureStateInfo.newBuilder() + .setPositionId(adventureStateInfo.getPosition()) + .setLevel(adventureStateInfo.getLevel()) + .setStateTime(now-adventureStateInfo.getStartTime()); + SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(adventureStateInfo.getPosition()); + Set bossIds = adventureStateInfo.getBossIds(); + Set removeCache = new HashSet<>(); + for(String bossId : bossIds){ + AdventureBoss adventureBoss = RedisUtil.getInstence().getMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO, "", bossId, AdventureBoss.class); + if(adventureBoss != null){ + int findBossTime = adventureBoss.getFindTime(); + int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - findBossTime); + if(remainTime>0){ + builder1.addAdventureBossSimpleInfo( + CommonProto.AdventureBossSimpleInfo.newBuilder().setArenaId(adventureStateInfo.getPosition()) + .setBossGroupId(adventureBoss.getBossGroupId()) + .setRemainTime(remainTime) + .build() + ); + }else{ + removeCache.add(bossId); + } + }else{ + removeCache.add(bossId); + } + } + if(!removeCache.isEmpty()){ + adventureStateInfo.removeMutBossGroup(removeCache); + } + + } + return builder.build(); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 71550ab51..a7cfcdc6d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -631,37 +631,7 @@ public class ItemUtil { } List sendToFront = new ArrayList<>(); List sendTemToFront = new ArrayList<>(); - int now = (int)(System.currentTimeMillis()/1000); for (Map.Entry userItem : useItemMap.entrySet()) { - int limit =0; - if ((userItem.getKey() == Global.STAMINA)){ - Item item = user.getItemManager().getItemMap().get(Global.STAMINA); - int itemNum = item.getItemNum(); - if(itemNum>=user.getPlayerInfoManager().getMaxStamina()){ - limit = user.getPlayerInfoManager().getMaxStamina(); - }else{ - MapManager.getEnergy(user); - } - } - if (userItem.getKey() == Global.HEROSTORY_TICKET || userItem.getKey() == Global.INVASIONBOSS_TICKET ){ - Item item = user.getItemManager().getItemMap().get(userItem.getKey()); - int itemNum = 0; - if(item!=null){ - itemNum = item.getItemNum(); - } - int maxTimes = SGameSetting.getGameSetting().getHeroTimes(); - if(userItem.getKey() == Global.INVASIONBOSS_TICKET){ - SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(user.getPlayerInfoManager().getVipLevel()); - Map privilegeMap = sVipLevelConfig.getPrivilegeMap(); - maxTimes = privilegeMap.get(VipPrivilegeType.CHALLENGE_INVASIONBOSS_LIMIT); - } - if(itemNum>=maxTimes){ - limit = user.getPlayerInfoManager().getMaxStamina(); - }else{ - MapManager.getTimesRecoveryTicket(user,userItem.getKey()); - } - - } Item temporaryItem = temporaryItemList.get(userItem.getKey()); int needCount = userItem.getValue(); if (temporaryItem != null) { @@ -691,9 +661,6 @@ public class ItemUtil { KtEventUtils.onKtEvent(user, eventType,reason,GlobalsDef.subReason,myItem.getItemId(),needCount,0); } else { myItem.setItemNum(myItem.getItemNum() - needCount); - if(myItem.getItemNum()