diff --git a/luafight/Modules/Battle/Logic/Base/Buff.lua b/luafight/Modules/Battle/Logic/Base/Buff.lua index 37d352664..5c6251311 100644 --- a/luafight/Modules/Battle/Logic/Base/Buff.lua +++ b/luafight/Modules/Battle/Logic/Base/Buff.lua @@ -133,8 +133,7 @@ function BuffManager:Update() else buffList = self.buffList.kvList[buff.id] end - local count = buffList.size - if buff.cover and count > 0 then + if buff.cover and buffList.size > 0 then if buffList.buffer[1]:OnCover(buff) then --判定该效果能否被覆盖 buffList.buffer[1]:OnEnd(self.owner) self.owner.Event:DispatchEvent(BattleEventName.BuffEnd, buffList.buffer[1]) @@ -145,12 +144,12 @@ function BuffManager:Update() self.owner.Event:DispatchEvent(BattleEventName.BuffCover, buff) end else - if buff.maxCount == 0 or count < buff.maxCount then --限制相同效果的数量,为0则不限制 + if buff.maxCount == 0 or buffList.size < buff.maxCount then --限制相同效果的数量,为0则不限制 buffList:Add(buff) buff.target = self.owner buff:OnStart() self.owner.Event:DispatchEvent(BattleEventName.BuffStart, buff) - self.owner.Event:DispatchEvent(BattleEventName.BuffCountChange, buff.id, count) + self.owner.Event:DispatchEvent(BattleEventName.BuffCountChange, buff.id, buffList.size) end end end diff --git a/luafight/Modules/Battle/Logic/Base/Effect.lua b/luafight/Modules/Battle/Logic/Base/Effect.lua index 7bdd2c496..3584f5208 100644 --- a/luafight/Modules/Battle/Logic/Base/Effect.lua +++ b/luafight/Modules/Battle/Logic/Base/Effect.lua @@ -245,7 +245,6 @@ local effectList = { local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval) if caster.camp == 0 and target.camp == 1 then BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval) diff --git a/luafight/Modules/Battle/Logic/Base/RoleData.lua b/luafight/Modules/Battle/Logic/Base/RoleData.lua index 3433d800d..190ac7eb3 100644 --- a/luafight/Modules/Battle/Logic/Base/RoleData.lua +++ b/luafight/Modules/Battle/Logic/Base/RoleData.lua @@ -3,7 +3,7 @@ RoleData.__index = RoleData local max = math.max local floor = math.floor function RoleData.New() - local instance = {role=0, data={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}} + local instance = {role=0, data={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}} setmetatable(instance, RoleData) return instance end diff --git a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua index a623f4bf0..71de97e99 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua @@ -61,28 +61,17 @@ RoleDataName = { Crit = indexAdd(), --暴击率(%) CritDamageFactor = indexAdd(), --暴击伤害系数(%) TreatFacter = indexAdd(),--治疗加成系数(%) - - FireDamageBocusFactor = indexAdd(), --火系伤害加成系数(%) FireDamageReduceFactor = indexAdd(), --火系伤害减免系数(%) - WindDamageBocusFactor = indexAdd(), --风系伤害加成系数(%) WindDamageReduceFactor = indexAdd(), --风系伤害减免系数(%) - IceDamageBocusFactor = indexAdd(), --冰系伤害加成系数(%) IceDamageReduceFactor = indexAdd(), --冰系伤害减免系数(%) - LandDamageBocusFactor = indexAdd(), --地系伤害加成系数(%) LandDamageReduceFactor = indexAdd(), --地系伤害减免系数(%) - LightDamageBocusFactor = indexAdd(), --光系伤害加成系数(%) LightDamageReduceFactor = indexAdd(), --光系伤害减免系数(%) - DarkDamageBocusFactor = indexAdd(), --暗系伤害加成系数(%) DarkDamageReduceFactor = indexAdd(), --暗系伤害减免系数(%) + ElementDamageBocusFactor = indexAdd(), --属性伤害加成系数(%) } BuffName = { - Poison = "Poison", PropertyChange = "PropertyChange", - Taunt = "Taunt", - Bleed = "Bleed", - Frozen = "Frozen", - Stun = "Stun", HOT = "HOT", DOT = "DOT", Control = "Control", diff --git a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua index 270ef8873..64c544ae6 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -120,14 +120,25 @@ function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDe end local atkData, defData = atkRole.data, defRole.data --伤害 =(基础伤害*(1+己伤害加成-目标伤害减免)*(1+己方属性伤害加成-目标属性伤害减免),10%*己攻) - baseDamage = baseDamage * baseFactor * - (1 + atkData:GetData(RoleDataName.DamageBocusFactor)) * (1 - defData:GetData(RoleDataName.DamageReduceFactor)) * - (1 + atkData:GetData(RoleDataName.FireDamageBocusFactor)) * (1 - defData:GetData(RoleDataName.FireDamageReduceFactor)) * --火系 - (1 + atkData:GetData(RoleDataName.WindDamageBocusFactor)) * (1 - defData:GetData(RoleDataName.WindDamageReduceFactor)) * --风系 - (1 + atkData:GetData(RoleDataName.IceDamageBocusFactor)) * (1 - defData:GetData(RoleDataName.IceDamageReduceFactor)) * --冰系 - (1 + atkData:GetData(RoleDataName.LandDamageBocusFactor)) * (1 - defData:GetData(RoleDataName.LandDamageReduceFactor)) * --地系 - (1 + atkData:GetData(RoleDataName.LightDamageBocusFactor)) * (1 - defData:GetData(RoleDataName.LightDamageReduceFactor)) * --光系 - (1 + atkData:GetData(RoleDataName.DarkDamageBocusFactor)) * (1 - defData:GetData(RoleDataName.DarkDamageReduceFactor)) --暗系 + + local element = 1 + local elementDamageReduceFactor = RoleDataName.FireDamageReduceFactor + if atkRole.element == 1 then + elementDamageReduceFactor = RoleDataName.FireDamageReduceFactor + elseif atkRole.element == 2 then + elementDamageReduceFactor = RoleDataName.WindDamageReduceFactor + elseif atkRole.element == 3 then + elementDamageReduceFactor = RoleDataName.IceDamageReduceFactor + elseif atkRole.element == 4 then + elementDamageReduceFactor = RoleDataName.LandDamageReduceFactor + elseif atkRole.element == 5 then + elementDamageReduceFactor = RoleDataName.LightDamageReduceFactor + elseif atkRole.element == 6 then + elementDamageReduceFactor = RoleDataName.DarkDamageReduceFactor + end + element = (1 + atkData:GetData(RoleDataName.ElementDamageBocusFactor)) * (1 - defData:GetData(elementDamageReduceFactor)) + + baseDamage = baseDamage * baseFactor * element baseDamage = max(baseDamage, 0.1 * attack) local func diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 3ca9536b3..4ea408bfe 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -26,6 +26,7 @@ public class HeroLogic { private HeroLogic(){} public static List transTemplate = new ArrayList<>(); + private static Map> transTemplateByHeroPropertyName = new HashMap<>(); static { transTemplate.add(HeroAttributeEnum.CurHP.getPropertyId()); // 生命 transTemplate.add(HeroAttributeEnum.Hp.getPropertyId()); // 最大生命 @@ -40,18 +41,32 @@ public class HeroLogic { transTemplate.add(HeroAttributeEnum.CritFactor.getPropertyId()); // 暴击率 transTemplate.add(HeroAttributeEnum.CritDamageFactor.getPropertyId()); // 暴击伤害系数 transTemplate.add(HeroAttributeEnum.TreatFacter.getPropertyId()); // 治疗加成系数 - transTemplate.add(HeroAttributeEnum.FireDamageBonusFactor.getPropertyId()); // 火系伤害加成系数 +// transTemplate.add(HeroAttributeEnum.FireDamageBonusFactor.getPropertyId()); // 火系伤害加成系数 transTemplate.add(HeroAttributeEnum.FireDamageReduceFactor.getPropertyId()); // 火系伤害减免系数 - transTemplate.add(HeroAttributeEnum.WindDamageBonusFactor.getPropertyId()); // 风系伤害加成系数 +// transTemplate.add(HeroAttributeEnum.WindDamageBonusFactor.getPropertyId()); // 风系伤害加成系数 transTemplate.add(HeroAttributeEnum.WindDamageReduceFactor.getPropertyId()); // 风系伤害减免系数 - transTemplate.add(HeroAttributeEnum.WaterDamageBonusFactor.getPropertyId()); // 冰系伤害加成系数 +// transTemplate.add(HeroAttributeEnum.WaterDamageBonusFactor.getPropertyId()); // 冰系伤害加成系数 transTemplate.add(HeroAttributeEnum.WaterDamageReduceFactor.getPropertyId());// 冰系伤害减免系数 - transTemplate.add(HeroAttributeEnum.LandDamageBonusFactor.getPropertyId()); // 地系伤害加成系数 +// transTemplate.add(HeroAttributeEnum.LandDamageBonusFactor.getPropertyId()); // 地系伤害加成系数 transTemplate.add(HeroAttributeEnum.LandDamageReduceFactor.getPropertyId()); // 地系伤害减免系数 - transTemplate.add(HeroAttributeEnum.LightDamageBonusFactor.getPropertyId()); // 雷系伤害加成系数 +// transTemplate.add(HeroAttributeEnum.LightDamageBonusFactor.getPropertyId()); // 雷系伤害加成系数 transTemplate.add(HeroAttributeEnum.LightDamageReduceFactor.getPropertyId());// 雷系伤害减免系数 - transTemplate.add(HeroAttributeEnum.DarkDamageBonusFactor.getPropertyId()); // 暗系伤害加成系数 +// transTemplate.add(HeroAttributeEnum.DarkDamageBonusFactor.getPropertyId()); // 暗系伤害加成系数 transTemplate.add(HeroAttributeEnum.DarkDamageReduceFactor.getPropertyId()); // 暗系伤害减免系数 + + transTemplateByHeroPropertyName.put(1,new ArrayList<>(transTemplate)); + transTemplateByHeroPropertyName.put(2,new ArrayList<>(transTemplate)); + transTemplateByHeroPropertyName.put(3,new ArrayList<>(transTemplate)); + transTemplateByHeroPropertyName.put(4,new ArrayList<>(transTemplate)); + transTemplateByHeroPropertyName.put(5,new ArrayList<>(transTemplate)); + transTemplateByHeroPropertyName.put(6,new ArrayList<>(transTemplate)); + + transTemplateByHeroPropertyName.get(1).add(HeroAttributeEnum.FireDamageBonusFactor.getPropertyId()); + transTemplateByHeroPropertyName.get(2).add(HeroAttributeEnum.WindDamageBonusFactor.getPropertyId()); + transTemplateByHeroPropertyName.get(3).add(HeroAttributeEnum.WaterDamageBonusFactor.getPropertyId()); + transTemplateByHeroPropertyName.get(4).add(HeroAttributeEnum.LandDamageBonusFactor.getPropertyId()); + transTemplateByHeroPropertyName.get(5).add(HeroAttributeEnum.LightDamageBonusFactor.getPropertyId()); + transTemplateByHeroPropertyName.get(6).add(HeroAttributeEnum.DarkDamageBonusFactor.getPropertyId()); } private static final String VERTICAL = "|"; private static final String DIVISION = "#"; @@ -668,7 +683,9 @@ public class HeroLogic { public StringBuilder getHeroProperty(User user, Hero hero, StringBuilder sb){ Map heroAttributeMap = calHeroFinalAttribute(user, hero); sb.append(hero.getLevel()).append(DIVISION); - for(Integer templatePropetyId:transTemplate){ + SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); + List templatePropetyIds = transTemplateByHeroPropertyName.get(scHero.getPropertyName()); + for(Integer templatePropetyId:templatePropetyIds){ Integer propertyValue = heroAttributeMap.get(templatePropetyId); if(propertyValue == null){ propertyValue =0; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java index 76a4ae2b9..d58215746 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -163,6 +163,7 @@ public class FightDataUtil { unitData.set("camp", 0); unitData.set("type", 1); unitData.set("quality", 1); + unitData.set("element", hero.getPropertyName()); unitData.set("skill", getSkill(skillIds[0])); unitData.set("superSkill", getSkill(skillIds[1]));