From d4390a092f955f01f2ea6e4b7eb5275eec61768c Mon Sep 17 00:00:00 2001 From: wangyuan Date: Mon, 13 May 2019 09:51:36 +0800 Subject: [PATCH 1/4] fight --- luafight/Modules/Battle/Logic/Base/Buff.lua | 1 + .../Modules/Battle/Logic/Base/Passivity.lua | 28 +++++++++---------- .../Battle/Logic/Misc/BattleDefine.lua | 1 + .../Modules/Battle/Logic/Misc/BattleUtil.lua | 25 +++++++++-------- luafight/Modules/Battle/Logic/RoleLogic.lua | 1 - 5 files changed, 29 insertions(+), 27 deletions(-) diff --git a/luafight/Modules/Battle/Logic/Base/Buff.lua b/luafight/Modules/Battle/Logic/Base/Buff.lua index 4a03f4df2..e6f1b87e4 100644 --- a/luafight/Modules/Battle/Logic/Base/Buff.lua +++ b/luafight/Modules/Battle/Logic/Base/Buff.lua @@ -87,6 +87,7 @@ function BuffManager:AddBuff(target, buff) --end buff.frameInterval = floor(buff.interval * BattleLogic.GameFrameRate) + buff.caster.Event:DispatchEvent(BattleEventName.BuffCaster, buff) end function BuffManager:HasBuff(target, type, checkFunc) diff --git a/luafight/Modules/Battle/Logic/Base/Passivity.lua b/luafight/Modules/Battle/Logic/Base/Passivity.lua index 6d6a123c5..512be413a 100644 --- a/luafight/Modules/Battle/Logic/Base/Passivity.lua +++ b/luafight/Modules/Battle/Logic/Base/Passivity.lua @@ -121,7 +121,7 @@ local passivityList = { for i=1, skill.effectList.size do duration = max(duration, skill.effectList.buffer[i].duration) end - role:AddPropertyTransfer(propertyList[pro1], f2, propertyList[pro2], duration) + role:AddPropertyTransfer(propertyList[pro1], f2, propertyList[pro2], duration + BattleLogic.GameDeltaTime * 2) end) end role.Event:AddEvent(BattleEventName.SkillCast, OnSkillCast) @@ -187,7 +187,7 @@ local passivityList = { local OnSkillCastEnd = function(skill) BattleUtil.RandomAction(f1, function () - local arr = chooseTarget(role, 10111) + local arr = chooseTarget(role, 10321) if arr[1] then arr[1]:AddBuff(Buff.Create(role, BuffName.HOT, f3, 1, floor(role:GetRoleData(propertyList[pro]) * f2))) end @@ -302,7 +302,7 @@ local passivityList = { damagingFunc(floor(role:GetRoleData(propertyList[pro]) * f2)) end) end - role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) + role.Event:AddEvent(BattleEventName.PassiveBeDamaging, OnPassiveDamaging) end, --受击后,有[a]的概率对敌方全体造成攻击*[c]的[d]伤害 @@ -351,7 +351,7 @@ local passivityList = { BattleUtil.RandomAction(f1, function () local arr = chooseTarget(role, 20001) if arr[1] then - BattleUtil.ApplyDamage(role, atkRole, floor(role:GetRoleData(propertyList[pro]) * f2)) + BattleUtil.ApplyDamage(role, arr[1], floor(role:GetRoleData(propertyList[pro]) * f2)) end end) lastTrigger = 0 @@ -521,7 +521,7 @@ local passivityList = { [22] = function(role, args) local f1 = args[1] local f2 = args[2] - local f3 = args[2] + local f3 = args[3] local triggerCount = 0 local OnDamaged = function(atkRole) @@ -634,12 +634,12 @@ local passivityList = { local f1 = args[1] local f2 = args[2] - local OnRoleDamageBefore = function(defRole, factorFunc) + local OnPassiveDamaging = function(damagingFunc, defRole, damage) if BattleUtil.GetHPPencent(defRole) > f1 then - factorFunc(f2) + damagingFunc(-floor(f2 * damage)) end end - role.Event:AddEvent(BattleEventName.RoleDamageBefore, OnRoleDamageBefore) + role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) end, --对血量低于[a]的敌人伤害提高[b]。 @@ -648,12 +648,12 @@ local passivityList = { local f1 = args[1] local f2 = args[2] - local OnRoleDamageBefore = function(defRole, factorFunc) + local OnPassiveDamaging = function(damagingFunc, defRole, damage) if BattleUtil.GetHPPencent(defRole) < f1 then - factorFunc(f2) + damagingFunc(-floor(f2 * damage)) end end - role.Event:AddEvent(BattleEventName.RoleDamageBefore, OnRoleDamageBefore) + role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) end, --发动技能后,[d]改变敌方全体[a]属性[b],持续[c]秒 @@ -725,7 +725,7 @@ local passivityList = { local OnPassiveDamaging = function(damagingFunc) damagingFunc(-f1) end - role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) + role.Event:AddEvent(BattleEventName.PassiveBeDamaging, OnPassiveDamaging) end, --进入战斗[a]秒后,造成的伤害提升[b],持续[c]秒 @@ -825,10 +825,10 @@ local passivityList = { [41] = function(role, args) local f1 = args[1] - local OnDamaged = function(atkRole, damage, bCrit, finalDmg) + local OnDamage = function(defRole, damage, bCrit, finalDmg) BattleUtil.CalTreat(role, role, floor(f1 * finalDmg)) end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) + role.Event:AddEvent(BattleEventName.RoleDamage, OnDamage) end, --造成暴击伤害时,有[a]的概率造成[b]的暴击伤害。 diff --git a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua index eecd3f590..18a251523 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua @@ -35,6 +35,7 @@ BattleEventName = { SkillCastEnd = indexAdd(), PassiveTreating = indexAdd(), + PassiveBeDamaging = indexAdd(), PassiveDamaging = indexAdd(), PassiveCriting = indexAdd(), diff --git a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua index 9db98899f..b242cec23 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -75,20 +75,12 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType) --加入被动效果 local damagingFunc = function(dmgDeduction) damage = damage - dmgDeduction end - defRole.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc) + atkRole.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc, defRole, damage) + defRole.Event:DispatchEvent(BattleEventName.PassiveBeDamaging, damagingFunc, atkRole, damage) if damage > 0 then local finalDmg = defRole.data:SubValue(RoleDataName.Hp, damage) if finalDmg > 0 then - if atkRole then - atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType) - end - defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType) - if bCrit then - atkRole.Event:DispatchEvent(BattleEventName.RoleCrit, defRole) - defRole.Event:DispatchEvent(BattleEventName.RoleBeCrit, atkRole) - end - if defRole:GetRoleData(RoleDataName.Hp) <= 0 then defRole.isDead = true BattleLogic.BuffMgr:ClearBuff(defRole) @@ -100,6 +92,15 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType) end) end end + + if atkRole then + atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType) + end + defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType) + if bCrit then + atkRole.Event:DispatchEvent(BattleEventName.RoleCrit, defRole) + defRole.Event:DispatchEvent(BattleEventName.RoleBeCrit, atkRole) + end end return finalDmg else @@ -190,8 +191,8 @@ function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor) baseFactor = baseFactor or 1 local maxHp = targetRole:GetRoleData(RoleDataName.MaxHp) local hp = targetRole:GetRoleData(RoleDataName.Hp) - local factor = castRole:GetRoleData(RoleDataName.TreatFacter) + 1 - local factor2 = targetRole:GetRoleData(RoleDataName.CureFacter) + 1 + local factor = castRole:GetRoleData(RoleDataName.TreatFacter) + local factor2 = targetRole:GetRoleData(RoleDataName.CureFacter) local baseTreat = floor(value * baseFactor * factor * factor2 + 0.5) --加入被动效果 diff --git a/luafight/Modules/Battle/Logic/RoleLogic.lua b/luafight/Modules/Battle/Logic/RoleLogic.lua index 18750f0da..2944543ab 100644 --- a/luafight/Modules/Battle/Logic/RoleLogic.lua +++ b/luafight/Modules/Battle/Logic/RoleLogic.lua @@ -154,7 +154,6 @@ function RoleLogic:AddBuff(buff) return end end - buff.caster.Event:DispatchEvent(BattleEventName.BuffCaster, buff) BattleLogic.BuffMgr:AddBuff(self, buff) end From 04de59ded6c780ba334492b8d1b0d7b880a3a607 Mon Sep 17 00:00:00 2001 From: gaojie Date: Mon, 13 May 2019 15:01:38 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=95=86=E5=BA=97=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/server/StoreTypeConfig.txt | 10 +- .../ljsd/jieling/config/SStoreTypeConfig.java | 8 +- .../handler/store/BuyStoreItemHandler.java | 25 ++ .../handler/store/StoreRefreItemHandler.java | 31 +++ .../com/ljsd/jieling/logic/dao/StoreInfo.java | 2 + .../ljsd/jieling/logic/mail/MailLogic.java | 1 + .../ljsd/jieling/logic/store/StoreLogic.java | 224 +++++++++++++++--- .../java/com/ljsd/jieling/util/ItemUtil.java | 23 ++ .../src/main/resources/application.properties | 6 +- 9 files changed, 290 insertions(+), 40 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/store/StoreRefreItemHandler.java diff --git a/conf/server/StoreTypeConfig.txt b/conf/server/StoreTypeConfig.txt index a3db1426a..bac3ee296 100644 --- a/conf/server/StoreTypeConfig.txt +++ b/conf/server/StoreTypeConfig.txt @@ -1,5 +1,5 @@ -Id Number RefreshItem RefreshType StoreOpenRule StartTime EndTime -int int mut,int#int,2 mut,int#int,1 int string string -1 3 14|0#0#0#10000 2#5 1 0 0 -2 3 14|0#0#0#10000 3#2 1 0 0 -3 3 14|0#0#0#10000 1#0 2 0 30 +Id Number RefreshItem RefreshType IfManualRefresh StoreOpenRule StartTime EndTime +int int mut,int#int,2 mut,int#int,1 int int string string +1 3 14|0#0#0#10000 2#5 1 1 0 0 +2 3 14|0#0#0#10000 3#2 1 1 0 0 +3 3 14|0#0#0#10000 1#0 1 2 0 30 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreTypeConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreTypeConfig.java index 5998688c6..05a7e7f82 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreTypeConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SStoreTypeConfig.java @@ -20,17 +20,18 @@ public class SStoreTypeConfig implements BaseConfig { private String endTime; + private int ifManualRefresh; @Override public void init() throws Exception { sStoreTypeConfigMap = STableManager.getConfig(SStoreTypeConfig.class); } - public static Map getSstoreTypeConfigMap (){ + public static Map getsStoreTypeConfigMap() { return sStoreTypeConfigMap; } - public int getId() { + public int getId() { return id; } @@ -57,4 +58,7 @@ public class SStoreTypeConfig implements BaseConfig { public int getNumber() { return number; } + public int getIfManualRefresh() { + return ifManualRefresh; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java new file mode 100644 index 000000000..87871ab93 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java @@ -0,0 +1,25 @@ +package com.ljsd.jieling.handler.store; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.store.StoreLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.PlayerInfoProto; +import org.springframework.stereotype.Component; + +@Component +public class BuyStoreItemHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.BUY_STORE_ITEM_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + PlayerInfoProto.BuyStoreItemRequest buyStoreItemRequest + = PlayerInfoProto.BuyStoreItemRequest.parseFrom(netData.parseClientProtoNetData()); + StoreLogic.buyStoreItem(iSession,buyStoreItemRequest.getStoreId(),buyStoreItemRequest.getItemId(),buyStoreItemRequest.getItemNum()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/store/StoreRefreItemHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/store/StoreRefreItemHandler.java new file mode 100644 index 000000000..8b8a08af8 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/store/StoreRefreItemHandler.java @@ -0,0 +1,31 @@ +package com.ljsd.jieling.handler.store; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.store.StoreLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.PlayerInfoProto; +import org.springframework.stereotype.Component; + +@Component +public class StoreRefreItemHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.BUY_STORE_ITEM_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + PlayerInfoProto.StoreGoodsRefreshRequest buyStoreItemRequest + = PlayerInfoProto.StoreGoodsRefreshRequest.parseFrom(netData.parseClientProtoNetData()); + int type = buyStoreItemRequest.getType(); + int storeId = buyStoreItemRequest.getStoreId(); + if (type ==0){ + StoreLogic.handRefreStore(iSession,storeId); + }else if (type ==1){ + StoreLogic.automaticRefreStore(iSession,storeId); + } + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/StoreInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/StoreInfo.java index 4c050be6d..00c1aa6ff 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/StoreInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/StoreInfo.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; +import java.util.List; import java.util.Map; public class StoreInfo extends MongoBase { @@ -38,6 +39,7 @@ public class StoreInfo extends MongoBase { } public void setItemNumMap(Map itemNumMap) { + updateString("itemNumMap", itemNumMap); this.itemNumMap = itemNumMap; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java index cf19e35af..61b4c2007 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java @@ -257,5 +257,6 @@ public class MailLogic { User user = UserManager.getUser(uid); Mail mail = new Mail(uid,title,content,reward,sendTime, mailEffectiveTime,"system",Global.MAIL_TYPE_SYS); user.getMailManager().addMail(mail); + LOGGER.info("sendMail==>uid={},title={},reward:{}",uid,title,reward); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 54eed30e0..6848f3bda 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -3,7 +3,7 @@ package com.ljsd.jieling.logic.store; import ch.qos.logback.core.util.TimeUtil; import com.ljsd.jieling.config.SStoreConfig; import com.ljsd.jieling.config.SStoreTypeConfig; -import com.ljsd.jieling.handler.store.GetAllStoreHandler; +import com.ljsd.jieling.logic.dao.PlayerManager; import com.ljsd.jieling.logic.dao.StoreInfo; import com.ljsd.jieling.logic.dao.StoreManager; import com.ljsd.jieling.logic.dao.UserManager; @@ -12,7 +12,9 @@ import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.PlayerInfoProto; +import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.StringUtil; import com.ljsd.jieling.util.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,42 +35,62 @@ public class StoreLogic { User user = UserManager.getUser(uid); StoreManager storeManager = user.getStoreManager(); if (storeManager.getStoreInfoMap().size() == 0){ - initStoreInfo(storeManager); + initStoreInfo(user,storeManager); } - PlayerInfoProto.GetStoreInfos.Builder builder = PlayerInfoProto.GetStoreInfos.newBuilder(); + PlayerInfoProto.GetStoreInfosResponse.Builder builder = PlayerInfoProto.GetStoreInfosResponse.newBuilder(); Map storeInfoMap = storeManager.getStoreInfoMap(); + checkStoreRefresh(storeManager,storeInfoMap); List storeInfos = new CopyOnWriteArrayList<>(); for (Map.Entry entry: storeInfoMap.entrySet()){ - CommonProto.StoreInfo.Builder storeBuilder = CommonProto.StoreInfo.newBuilder(); - StoreInfo storeInfo = entry.getValue(); - storeBuilder.setId(storeInfo.getId()); - storeBuilder.setLastRefreshTime(storeInfo.getLastRefreshTime()); - storeBuilder.setRefreshNum(storeInfo.getRefreshNum()); - storeBuilder.setStartTime(storeInfo.getStartTime()); - storeBuilder.setEndTime(storeInfo.getEndTime()); - Map itemNumMap = storeInfo.getItemNumMap(); - List builderList = new CopyOnWriteArrayList<>(); - for (Map.Entry entry1: itemNumMap.entrySet()){ - int itemId = entry1.getKey(); - int buyNum = entry1.getValue(); - CommonProto.StoreItem.Builder storeItemBuilder = CommonProto.StoreItem.newBuilder(); - storeItemBuilder.setId(itemId); - storeItemBuilder.setBuyNum(buyNum); - builderList.add(storeItemBuilder.build()); - } - storeBuilder.addAllStoreItem(builderList); + CommonProto.StoreInfo.Builder storeBuilder = getBuilder(entry.getValue()); storeInfos.add(storeBuilder.build()); } builder.addAllStoreInfo(storeInfos); MessageUtil.sendMessage(iSession, 1,msgId, builder.build(), true); } + + private static CommonProto.StoreInfo.Builder getBuilder(StoreInfo storeInfo) { + CommonProto.StoreInfo.Builder storeBuilder = CommonProto.StoreInfo.newBuilder(); + storeBuilder.setId(storeInfo.getId()); + storeBuilder.setLastRefreshTime(storeInfo.getLastRefreshTime()); + storeBuilder.setRefreshNum(storeInfo.getRefreshNum()); + storeBuilder.setStartTime(storeInfo.getStartTime()); + storeBuilder.setEndTime(storeInfo.getEndTime()); + Map itemNumMap = storeInfo.getItemNumMap(); + List builderList = new CopyOnWriteArrayList<>(); + for (Map.Entry entry1: itemNumMap.entrySet()){ + int itemId = entry1.getKey(); + int buyNum = entry1.getValue(); + CommonProto.StoreItem.Builder storeItemBuilder = CommonProto.StoreItem.newBuilder(); + storeItemBuilder.setId(itemId); + storeItemBuilder.setBuyNum(buyNum); + builderList.add(storeItemBuilder.build()); + } + storeBuilder.addAllStoreItem(builderList); + return storeBuilder; + } + + //检测商店刷新 + private static void checkStoreRefresh(StoreManager storeManager,Map storeInfoMap) { + long nowTime = System.currentTimeMillis(); + for (Map.Entry entry:storeInfoMap.entrySet()){ + StoreInfo storeInfo = entry.getValue(); + SStoreTypeConfig sStoreTypeConfig = SStoreTypeConfig.getsStoreTypeConfigMap().get(storeInfo.getId()); + if (sStoreTypeConfig.getStoreOpenRule() ==2){ + if ((nowTime - storeInfo.getEndTime()) > Integer.parseInt(sStoreTypeConfig.getEndTime()) * 60 *1000){ + storeManager.removeStoreInfo(storeInfo.getId()); + } + } + } + } + //初始化商店 - private static void initStoreInfo(StoreManager storeManager) throws Exception { - Map sstoreTypeConfigMap = SStoreTypeConfig.getSstoreTypeConfigMap(); + private static void initStoreInfo(User user,StoreManager storeManager) throws Exception { + Map sstoreTypeConfigMap = SStoreTypeConfig.getsStoreTypeConfigMap(); for ( Map.Entry entry :sstoreTypeConfigMap.entrySet()){ SStoreTypeConfig sStoreTypeConfig = entry.getValue(); if (sStoreTypeConfig.getStoreOpenRule() == 1){ //固定商店 - Map itemNumMap = getStoreItem(sStoreTypeConfig.getId(),sStoreTypeConfig.getNumber()); + Map itemNumMap = getStoreItem(sStoreTypeConfig.getId(),sStoreTypeConfig,user); long startTime = 0; long endTime = 0; if (!sStoreTypeConfig.getStartTime().equals("0")){ @@ -85,16 +107,17 @@ public class StoreLogic { /** * 随机获得商店物品 */ - private static Map getStoreItem(int storeId,int itemNum) { + private static Map getStoreItem(int storeId, SStoreTypeConfig sStoreTypeConfig ,User user) { Map itemNumMap = new ConcurrentHashMap<>(); - for (int i = 1; i <= itemNum; i ++){ - int rewardId = getRewardId(storeId,i); + for (int i = 1; i <= sStoreTypeConfig.getNumber(); i ++){ + int rewardId = getRewardId(storeId,i,user); itemNumMap.put(rewardId, 0); } return itemNumMap; } - private static int getRewardId(int storeId,int sort) { + private static int getRewardId(int storeId,int sort,User user) { + PlayerManager playerInfoManager = user.getPlayerInfoManager(); List sstoreConfigBuyStore = SStoreConfig.getSstoreConfigBuyStore(storeId); List randomSstoreConfigList = new CopyOnWriteArrayList<>(); int totalWeight = 0; @@ -102,8 +125,12 @@ public class StoreLogic { if (sort != sStoreConfig.getSort()){ continue; } - totalWeight += sStoreConfig.getWeight(); - randomSstoreConfigList.add(sStoreConfig); + int minLv = sStoreConfig.getOpenLv()[0]; + int maxLv = sStoreConfig.getOpenLv()[1]; + if (minLv <= playerInfoManager.getLevel() && maxLv >= playerInfoManager.getLevel()){ + totalWeight += sStoreConfig.getWeight(); + randomSstoreConfigList.add(sStoreConfig); + } } int weight = 0; int rewardId = 0; @@ -118,4 +145,141 @@ public class StoreLogic { } return rewardId; } + + /** + * 购买商店物品 + * @param iSession + * @param storeId + * @param itemId + * @throws Exception + */ + public static void buyStoreItem(ISession iSession,int storeId, int itemId,int itemNum) throws Exception { + int msgId = MessageTypeProto.MessageType.BUY_STORE_ITEM_RESPONSE_VALUE; + int uid = iSession.getUid(); + if (itemNum < 0|| itemNum >999){ + LOGGER.info("buyStoreItem==> uid={},itemNum={}",uid,itemNum); + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + return; + } + User user = UserManager.getUser(uid); + Map storeInfoMap = user.getStoreManager().getStoreInfoMap(); + if (!storeInfoMap.containsKey(storeId)){ + LOGGER.info("buyStoreItem==> uid={},storeId={}",uid,storeId); + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + return; + } + StoreInfo storeInfo = storeInfoMap.get(storeId); + Map itemNumMap =storeInfo.getItemNumMap(); + if (!itemNumMap.containsKey(itemId)){ + LOGGER.info("buyStoreItem==> uid={},itemId={}",uid,itemId); + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + return; + } + int buyTimes = itemNumMap.get(itemId); + SStoreConfig sStoreConfig = SStoreConfig.getSstoreConfigMap().get(itemId); + String cost = getCost(buyTimes,sStoreConfig.getCost()); + boolean result = ItemUtil.itemCost(user, StringUtil.parseFiledInt2(cost)); + if (!result){ + MessageUtil.sendErrorResponse(iSession,0,msgId,"道具不足"); + return; + } + itemNumMap.put(itemId,buyTimes +1); + storeInfo.setItemNumMap(itemNumMap); + int goodsId = sStoreConfig.getGoods()[0]; + int goodsNum = sStoreConfig.getGoods()[0]*itemNum; + String reward = goodsId +"#"+goodsNum; + CommonProto.Drop.Builder drop = ItemUtil.drop(user, StringUtil.parseFiledInt2(reward)); + PlayerInfoProto.BuyStoreItemResponse builder = PlayerInfoProto.BuyStoreItemResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(iSession, 1,msgId, builder, true); + } + + private static String getCost(int buyTimes, int[][] costs) { + int costItemId = costs[0][0]; + int[] ints = costs[1]; + int costNum = (int) (Math.ceil(Math.pow(ints[0], 3)) *buyTimes) + (int) (Math.ceil(Math.pow(ints[1], 2)) *buyTimes) +(int) (Math.ceil(Math.pow(ints[2], 1)) *buyTimes) + ints[3]; + String cost = costItemId +"#"+costNum; + return cost; + } + + //手动刷新商店 + public static void handRefreStore(ISession iSession,int storeId) throws Exception { + int msgId = MessageTypeProto.MessageType.STORE_GOODS_REFRESH_RESPONSE_VALUE; + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + StoreManager storeManager = user.getStoreManager(); + Map storeInfoMap = storeManager.getStoreInfoMap(); + if (!storeInfoMap.containsKey(storeId)){ + LOGGER.info("handRefreStore==> uid={},storeId={}",uid,storeId); + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + return; + } + StoreInfo storeInfo = storeInfoMap.get(storeId); + SStoreTypeConfig sStoreTypeConfig = SStoreTypeConfig.getsStoreTypeConfigMap().get(storeId); + if (sStoreTypeConfig.getIfManualRefresh() != 1){ + LOGGER.info("handRefreStore==> uid={},storeId={},ifManualRefresh={}",uid,storeId,sStoreTypeConfig.getIfManualRefresh()); + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + return; + } + int refreshNum = storeInfo.getRefreshNum(); + String cost = getCost(refreshNum, sStoreTypeConfig.getRefreshItem()); + boolean result = ItemUtil.itemCost(user, StringUtil.parseFiledInt2(cost)); + if (!result){ + MessageUtil.sendErrorResponse(iSession,0,msgId,"道具不足"); + return; + } + Map itemNumMap = getStoreItem(sStoreTypeConfig.getId(),sStoreTypeConfig,user); + storeInfo.setRefreshNum(storeInfo.getRefreshNum() +1); + storeInfo.setItemNumMap(itemNumMap); + CommonProto.StoreInfo.Builder storeBuilder = getBuilder(storeInfo); + PlayerInfoProto.StoreGoodsRefreshResponse builder = PlayerInfoProto.StoreGoodsRefreshResponse.newBuilder().setStoreInfo(storeBuilder).build(); + MessageUtil.sendMessage(iSession, 1,msgId, builder, true); + } + //自动刷新商店 + public static void automaticRefreStore(ISession iSession,int storeId) throws Exception { + int msgId = MessageTypeProto.MessageType.STORE_GOODS_REFRESH_RESPONSE_VALUE; + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + StoreManager storeManager = user.getStoreManager(); + Map storeInfoMap = storeManager.getStoreInfoMap(); + if (!storeInfoMap.containsKey(storeId)){ + LOGGER.info("handRefreStore==> uid={},storeId={}",uid,storeId); + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + return; + } + StoreInfo storeInfo = storeInfoMap.get(storeId); + SStoreTypeConfig sStoreTypeConfig = SStoreTypeConfig.getsStoreTypeConfigMap().get(storeId); + int type = sStoreTypeConfig.getRefreshType()[0]; + if (type == 1){ + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + LOGGER.info("automaticRefreStore==>uid={},storeid={},type={}",uid,storeId,type); + return; + } + Map itemNumMap = null; + long nowTime = System.currentTimeMillis(); + switch (type){ + case 2: + boolean overTime = TimeUtils.isOverTime(5, storeInfo.getLastRefreshTime()); + if (overTime){ + itemNumMap = getStoreItem(sStoreTypeConfig.getId(),sStoreTypeConfig,user); + } + break; + case 3: + if ((nowTime - storeInfo.getEndTime()) > Integer.parseInt(sStoreTypeConfig.getEndTime()) *60 *1000){ + itemNumMap = getStoreItem(sStoreTypeConfig.getId(),sStoreTypeConfig,user); + } + break; + } + if (itemNumMap == null){ + MessageUtil.sendErrorResponse(iSession,0,msgId,""); + LOGGER.info("automaticRefreStore==>uid={},storeid={},type={}",uid,storeId,type); + return; + } + storeInfo.setItemNumMap(itemNumMap); + storeInfo.setLastRefreshTime(nowTime); + storeInfo.setRefreshNum(storeInfo.getRefreshNum() +1); + CommonProto.StoreInfo.Builder storeBuilder = getBuilder(storeInfo); + PlayerInfoProto.StoreGoodsRefreshResponse builder = PlayerInfoProto.StoreGoodsRefreshResponse.newBuilder().setStoreInfo(storeBuilder).build(); + MessageUtil.sendMessage(iSession, 1,msgId, builder, true); + } } + 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 3926bdf3f..a51e485e8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -587,13 +587,36 @@ public class ItemUtil { if (cardMap.isEmpty()) { return; } + SGameSetting gameSetting = SGameSetting.getGameSetting(); + int hasHeroNum = user.getHeroManager().getHeroMap().size(); + String title = SErrorCodeEerverConfig.getI18NMessage("card_bag_limit_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("card_bag_limit_txt"); + if (hasHeroNum >= gameSetting.getHeroNumlimit()){ + String reward = getLimitReward(cardMap); + int nowTime =(int) (TimeUtils.now()/1000); + MailLogic.getInstance().sendMail(Integer.parseInt(user.getId()),title,content,reward,nowTime,Global.MAIL_EFFECTIVE_TIME); + return; + } List heroList = new CopyOnWriteArrayList<>(); + StringBuilder reward = new StringBuilder(); for (Map.Entry entry : cardMap.entrySet()) { int count = entry.getValue(); for (int i = 0; i < count; i++) { + if (user.getHeroManager().getHeroMap().size() >= gameSetting.getHeroNumlimit()) { + if (reward.length() == 0){ + reward = new StringBuilder(entry.getKey() + "#1"); + }else{ + reward.append("|").append(entry.getKey()).append("#1"); + } + continue; + } addCard(user, entry.getKey(),heroList); } } + if (reward.length() > 0) { + int nowTime = (int) (TimeUtils.now() / 1000); + MailLogic.getInstance().sendMail(Integer.parseInt(user.getId()), title, content, reward.toString(), nowTime, Global.MAIL_EFFECTIVE_TIME); + } dropBuilder.addAllHero(heroList); } diff --git a/serverlogic/src/main/resources/application.properties b/serverlogic/src/main/resources/application.properties index d4e884493..05ea1a735 100644 --- a/serverlogic/src/main/resources/application.properties +++ b/serverlogic/src/main/resources/application.properties @@ -1,12 +1,12 @@ #server info -server.id = 10215 +server.id = 10212 server.openTime = 20190101000101 server.num = 1 # redis config # RedisݿĬΪ0 -spring.redis.database=0 +spring.redis.database=1 # Redisַ spring.redis.host=60.1.1.14 # RedisӶ˿ @@ -30,7 +30,7 @@ spring.redis.expireTime = -1 #spring.data.mongodb.uri = mongodb://mongouser:ysj#2017#ljsd@111.231.54.96:27017/ysj_wx_1 #spring.data.mongodb2.uri = mongodb://mongouser:ysj#2017#ljsd@111.231.54.96:27017/develop_ysj_wx_1 #mongodb2 develop -spring.data.mongodb.uri = mongodb://60.1.1.14:27017/jieling_10215 +spring.data.mongodb.uri = mongodb://60.1.1.14:27017/jieling_10212 mongodb.options.maxWaitTime = 120000 mongodb.options.connectTimeout = 1000 mongodb.options.socketTimeout = 0 From be46197ed25bef3fb21220b013caf8a6b715c52d Mon Sep 17 00:00:00 2001 From: gaojie Date: Mon, 13 May 2019 15:05:06 +0800 Subject: [PATCH 3/4] fix --- serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a51e485e8..83b782d17 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -537,7 +537,7 @@ public class ItemUtil { for (Map.Entry entry : equipMap.entrySet()) { int count = entry.getValue(); for (int i = 0; i < count; i++) { - if (user.getEquipManager().getEquipMap().size() > gameSetting.getEquipNumlimit()) { + if (user.getEquipManager().getEquipMap().size() >= gameSetting.getEquipNumlimit()) { if (reward.length() == 0){ reward = new StringBuilder(entry.getKey() + "#1"); }else{ From 9870d36663e08e0aed88fbaaf1076524bb649280 Mon Sep 17 00:00:00 2001 From: gaojie Date: Mon, 13 May 2019 15:26:38 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=85=85=E5=80=BC=E5=95=86=E5=BA=97?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/GetPlayerInfoHandler.java | 3 +++ .../com/ljsd/jieling/logic/store/StoreLogic.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index 7aa668cd5..e5d39f2f3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; @@ -50,6 +51,8 @@ public class GetPlayerInfoHandler extends BaseHandler{ MapLogic.getInstance().resetDayInfo(user); //活动刷新 ActivityLogic.getInstance().flushEveryDay(user); + //商店刷新次数重置 + StoreLogic.resetStoreRefreshNum(userId); } user.getPlayerInfoManager().setLoginTime(TimeUtils.now()); Map guidePoints = user.getPlayerInfoManager().getGuidePoints(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 6848f3bda..6c47e1d85 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -281,5 +281,20 @@ public class StoreLogic { PlayerInfoProto.StoreGoodsRefreshResponse builder = PlayerInfoProto.StoreGoodsRefreshResponse.newBuilder().setStoreInfo(storeBuilder).build(); MessageUtil.sendMessage(iSession, 1,msgId, builder, true); } + + /** + * 重置商店刷新次数 + * @param uid + * @throws Exception + */ + public static void resetStoreRefreshNum(int uid) throws Exception { + User user = UserManager.getUser(uid); + StoreManager storeManager = user.getStoreManager(); + Map storeInfoMap = storeManager.getStoreInfoMap(); + for (Map.Entry entry: storeInfoMap.entrySet()){ + StoreInfo storeInfo = entry.getValue(); + storeInfo.setRefreshNum(0); + } + } }