From 333caa887caceeedc208b72b7c3e161c20fda344 Mon Sep 17 00:00:00 2001 From: mashiyu Date: Wed, 20 Mar 2019 10:15:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/config/SSkillLogicConfig.java | 2 +- .../com/ljsd/jieling/db/redis/RedisKey.java | 6 + .../ljsd/jieling/handler/map/MapLogic.java | 19 ++ .../handler/map/behavior/BehaviorUtil.java | 5 + .../com/ljsd/jieling/util/FightDataUtil.java | 292 ++++++++++++++---- 5 files changed, 255 insertions(+), 69 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SSkillLogicConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SSkillLogicConfig.java index 40ddf8699..da8bf5355 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SSkillLogicConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SSkillLogicConfig.java @@ -37,7 +37,7 @@ public class SSkillLogicConfig implements BaseConfig { sSkillLogicVoMap = skillLogicVoMap; } - public static SSkillLogicVo getsSkillLogicVoMap(int skillId) { + public static SSkillLogicVo getsSkillLogicVo(int skillId) { return sSkillLogicVoMap.get(skillId); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 990100cf9..5d29c6e66 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -19,6 +19,12 @@ public class RedisKey { * 战斗缓存 */ public static final String FIGHT = "FIGHT"; + + /** + * 战斗种子 + */ + public static final String FIGHT_SEED = "FIGHT_SEED"; + /** * 过期事件 */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 27d31a01e..f1236909e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -2,10 +2,13 @@ package com.ljsd.jieling.handler.map; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.handler.map.behavior.BaseBehavior; import com.ljsd.jieling.handler.mission.Mission; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.CheckFight; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; @@ -13,6 +16,7 @@ import com.ljsd.jieling.protocols.FightInfoProto; import com.ljsd.jieling.protocols.MapInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.util.*; +import org.luaj.vm2.LuaValue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ConfigurableApplicationContext; @@ -544,6 +548,7 @@ public class MapLogic { public void endFight(ISession session, int result, MessageTypeProto.MessageType messageType, int monsterGroupId) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); + // String key = RedisKey.getKey(RedisKey.FIGHT, user.getId() , false); // String value = (String) RedisUtil.getInstence().get(key); // if (value == null || value.isEmpty()) { @@ -551,6 +556,20 @@ public class MapLogic { // MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); // return; // } + + List pokemonSkill = new ArrayList<>(); + List heroList = new ArrayList<>(); + List monsterIdList = new ArrayList<>(); + + String key = RedisKey.getKey(RedisKey.FIGHT_SEED, user.getId() , false); + int seed = (Integer) RedisUtil.getInstence().getAndDelete(key); + + String optionData = "14#1#0|132#2#3|152#2#5|178#3#2|219#2#4|260#3#1|287#2#2|312#3#5|467#1#1"; + LuaValue getFightData = FightDataUtil.getFinalFightData(heroList,pokemonSkill,monsterIdList); + LuaValue getOptionData = FightDataUtil.getOptionData(optionData); + int[] checkResult = CheckFight.getInstance().checkFight(seed, getFightData, getOptionData); + + SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(monsterGroupId); if (sMonsterGroup == null) { LOGGER.info("endFight() uid=>{} monsterGroupId=>{} sMonsterGroup == null", uid, monsterGroupId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java index c5faa520e..f139cd53f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java @@ -77,6 +77,11 @@ public class BehaviorUtil { MapManager mapManager = user.getMapManager(); String key = RedisKey.getKey(RedisKey.FIGHT, user.getId(), false); RedisUtil.getInstence().set(key, Integer.toString(groupId), RedisKey.EXPIRE_TIME); + + + String seed_key = RedisKey.getKey(RedisKey.FIGHT_SEED, user.getId(), false); + RedisUtil.getInstence().set(seed_key, Integer.toString((int)(System.currentTimeMillis()/1000)), RedisKey.EXPIRE_TIME); + Set heroes = mapManager.getHeroes(); List heroFightInfos = new ArrayList<>(heroes.size()); for (String heroId : heroes) { 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 de1478550..0e69cf840 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -1,51 +1,129 @@ package com.ljsd.jieling.util; +import com.ljsd.jieling.config.*; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.logic.STableManager; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; +import java.util.ArrayList; import java.util.List; +import java.util.Map; public class FightDataUtil { - public static LuaValue getFightData(LuaValue playerData, LuaValue enemyData){ - LuaValue LuaTable = new LuaTable(); - LuaTable.set("playerData",playerData); - LuaTable.set("enemyData",enemyData); - return LuaTable; - } - - - public static LuaValue getPlayerData(List unitDataList){ - LuaValue playerData = new LuaTable(); - for (LuaValue unitData : unitDataList){ - playerData.add(unitData); + /** + * 组装操作数据 + * + * @param data + * @return + */ + public static LuaValue getOptionData(String data) { + String[] tempData1 = data.split("\\|"); + LuaValue tableA = new LuaTable(); + for (int i = 0; i < tempData1.length; i++) { + String[] tempData2 = tempData1[i].split("#"); + LuaValue tableB = new LuaTable(); + for (int j = 0; j < tempData2.length; j++) { + tableB.rawset(j + 1, LuaValue.valueOf(Integer.parseInt(tempData2[j]))); + } + tableA.rawset(i + 1, tableB); } - return playerData; + return tableA; } + public static LuaValue getFinalFightData(List heroList, List pokemonSkill, List monsterIdList) { - public static LuaValue getEnemyData(List enemyDataList){ + LuaValue LuaTable = new LuaTable(); + LuaTable.set("playerData", getPlayerData(heroList, pokemonSkill)); + LuaTable.set("enemyData", getEnemyData(monsterIdList)); + return LuaTable; + + } + + public static LuaValue getEnemyData(List enemyDataList) { LuaValue enemyData = new LuaTable(); - for (LuaValue unitData : enemyDataList){ - enemyData.add(unitData); + for (int i = 0; i < enemyDataList.size(); i++) { + enemyData.rawset(i + 1, getMonsterFightUnit(enemyDataList.get(i))); } return enemyData; } + private static LuaValue getMonsterFightUnit(String id) { - public static LuaValue getEnemyListData(List enemyList){ + SMonsterConfig sMonster = SMonsterConfig.getsMonsterConfigMap().get(Integer.parseInt(id)); + + LuaValue unitData = new LuaTable(); + unitData.set("roleId", sMonster.getId()); + unitData.set("professionId", sMonster.getProfession()); + unitData.set("camp", 1); + unitData.set("type", sMonster.getType()); + unitData.set("quality", sMonster.getQuality()); + + unitData.set("skill", getSkill(Integer.toString(sMonster.getSkillList()[0]))); + unitData.set("superSkill", new LuaTable()); + unitData.set("passivity", new LuaTable()); + unitData.set("property", getMonsterProperty(sMonster)); + return unitData; + } + + /** + * --属性 {等级,生命,最大生命,攻击力,护甲,魔抗,速度,伤害加成系数(%,伤害减免系数(%),命中率(%),闪避率(%),暴击率(%),暴击伤害系数(%),治疗加成系数(%) + * -- ,火系伤害加成系数(%),火系伤害减免系数(%),冰系伤害加成系数(%),冰系伤害减免系数(%),雷系伤害加成系数(%),雷系伤害减免系数(%),风系伤害加成系数(%) + * -- ,风系伤害减免系数(%),地系伤害加成系数(%),地系伤害减免系数(%),暗系伤害加成系数(%),暗系伤害减免系数(%)} + * @param sMonster + * @return + */ + + private static LuaValue getMonsterProperty(SMonsterConfig sMonster) { + LuaValue property = new LuaTable(); + property.rawset(1, LuaValue.valueOf(sMonster.getLevel())); + property.rawset(2, LuaValue.valueOf(sMonster.getHp())); + property.rawset(3, LuaValue.valueOf(sMonster.getHp())); + property.rawset(4, LuaValue.valueOf(sMonster.getAttack())); + property.rawset(5, LuaValue.valueOf(sMonster.getPhysicalDefence())); + property.rawset(6, LuaValue.valueOf(sMonster.getMagicDefence())); + property.rawset(7, LuaValue.valueOf(sMonster.getSpeed())); + property.rawset(8, LuaValue.valueOf(0)); + property.rawset(9, LuaValue.valueOf(0)); + property.rawset(10, LuaValue.valueOf(sMonster.getHit())); + property.rawset(11, LuaValue.valueOf(sMonster.getDodge())); + property.rawset(12, LuaValue.valueOf(sMonster.getCritFactor())); + property.rawset(13, LuaValue.valueOf(sMonster.getCritDamageFactor())); + property.rawset(14, LuaValue.valueOf(1)); + property.rawset(15, LuaValue.valueOf(sMonster.getDamageBonusFactor()[0])); + property.rawset(16, LuaValue.valueOf(sMonster.getDamageReduceFactor()[0])); + property.rawset(17, LuaValue.valueOf(sMonster.getDamageBonusFactor()[1])); + property.rawset(18, LuaValue.valueOf(sMonster.getDamageReduceFactor()[1])); + property.rawset(19, LuaValue.valueOf(sMonster.getDamageBonusFactor()[2])); + property.rawset(20, LuaValue.valueOf(sMonster.getDamageReduceFactor()[2])); + property.rawset(21, LuaValue.valueOf(sMonster.getDamageBonusFactor()[3])); + property.rawset(22, LuaValue.valueOf(sMonster.getDamageReduceFactor()[3])); + property.rawset(23, LuaValue.valueOf(sMonster.getDamageBonusFactor()[4])); + property.rawset(24, LuaValue.valueOf(sMonster.getDamageReduceFactor()[4])); + property.rawset(25, LuaValue.valueOf(sMonster.getDamageBonusFactor()[5])); + property.rawset(26, LuaValue.valueOf(sMonster.getDamageReduceFactor()[5])); + return property; + } + + + public static LuaValue getEnemyListData(List enemyList) { LuaValue enemyDataList = new LuaTable(); - for (LuaValue unitData : enemyList){ + for (LuaValue unitData : enemyList) { enemyDataList.add(unitData); } return enemyDataList; } + + + public static LuaValue getTestFightData() { LuaValue LuaTable = new LuaTable(); - LuaTable.set("playerData",getTestPlayerData()); - LuaTable.set("enemyData",getTestEnemyData()); + LuaTable.set("playerData", getTestPlayerData()); + LuaTable.set("enemyData", getTestEnemyData()); return LuaTable; } @@ -61,26 +139,121 @@ public class FightDataUtil { return playerDataMap; } + public static LuaValue getPlayerData(List heroList, List pokemonSkill) { + LuaValue playerData = new LuaTable(); + for (int i = 1; i <= heroList.size(); i++) { + playerData.rawset(i, getHeroFightUnit(heroList.get(i - 1))); + } + playerData.rawset("teamSkill", getTeamSkill(pokemonSkill)); + return playerData; + } + + private static LuaValue getTeamSkill(List pokemonSkill) { + LuaValue teamSkill = new LuaTable(); + for (int i = 0; i < pokemonSkill.size(); i++) { + + teamSkill.rawset(i + 1, getSkill(Integer.toString(pokemonSkill.get(i)))); + } + return teamSkill; + } + + + private static LuaValue getHeroFightUnit(String data) { + String[] dataList = data.split("#"); + SCHero hero = SCHero.getsCHero().get(dataList[0]); + LuaValue unitData = new LuaTable(); + unitData.set("roleId", hero.getId()); + unitData.set("professionId", hero.getProfession()); + unitData.set("camp", 0); + unitData.set("type", 1); + unitData.set("quality", 1); + + unitData.set("skill", getSkill(dataList[1])); + unitData.set("superSkill", getSkill(dataList[2])); + unitData.set("passivity", getTestSkill(false)); + unitData.set("property", getProperty(dataList)); + return unitData; + } + + private static LuaValue getProperty(String[] dataList) { + LuaValue property = new LuaTable(); + for (int i = 3; i <= dataList.length - 1; i++) { + property.rawset(i, LuaValue.valueOf(propertyHero[i])); + } + return property; + } + + private static LuaValue getSkill(String skillId) { + LuaValue skill = new LuaTable(); + SSkillLogicVo sSkillLogicVo = SSkillLogicConfig.getsSkillLogicVo(Integer.valueOf(skillId)); + if (sSkillLogicVo != null) { + skill.rawset(1, LuaValue.valueOf(sSkillLogicVo.getCd())); + List effectList = getEffect(sSkillLogicVo); + int size = effectList.size(); + if (size > 0) { + for (int i = 0; i < size; i++) { + skill.rawset(i + 2, effectList.get(i)); + } + } + } + return skill; + } + + private static List getEffect(SSkillLogicVo sSkillLogicVo) { + List effectList = new ArrayList<>(); + for (SkillTargetVo skillTargetVos : sSkillLogicVo.getSkillTargetVoList()) { + LuaValue effect = new LuaTable(); + effect.rawset(1, LuaValue.valueOf(skillTargetVos.getTargetId())); + effect.rawset(2, LuaValue.valueOf(skillTargetVos.getContinuedTime())); + List effectValueList = getEffectArgs(skillTargetVos.getEffectVale()); + int size = effectValueList.size(); + if (size > 0) { + for (int i = 0; i < size; i++) { + effect.rawset(i + 3, effectValueList.get(i)); + } + } + effectList.add(effect); + } + return effectList; + } + + private static List getEffectArgs(float[][] effects) { + List effectValueList = new ArrayList<>(); + int sizeY = effects.length; + if (sizeY > 0) { + for (int i = 0; i < sizeY; i++) { + int sizeX = effects[i].length; + LuaValue effectValue = new LuaTable(); + for (int j = 0; j < sizeX; j++) { + effectValue.rawset(j + 1, LuaValue.valueOf(effects[i][j])); + } + effectValueList.add(effectValue); + } + } + return effectValueList; + } + + private static LuaValue getTestFightUnit(boolean b) { LuaValue unitData = new LuaTable(); - unitData.set("type",1); - unitData.set("quality",1); + unitData.set("type", 1); + unitData.set("quality", 1); - unitData.set("skill",getTestSkill(true)); - unitData.set("passivity",getTestSkill(false)); - if (b){ - unitData.set("roleId",10001); - unitData.set("professionId",4); - unitData.set("camp",0); - unitData.set("superSkill",getTestSkill(true)); - unitData.set("property",getTestProperty(true)); - }else { - unitData.set("roleId",1); - unitData.set("professionId",2); - unitData.set("camp",1); - unitData.set("superSkill",getTestSkill(false)); - unitData.set("property",getTestProperty(false)); + unitData.set("skill", getTestSkill(true)); + unitData.set("passivity", getTestSkill(false)); + if (b) { + unitData.set("roleId", 10001); + unitData.set("professionId", 4); + unitData.set("camp", 0); + unitData.set("superSkill", getTestSkill(true)); + unitData.set("property", getTestProperty(true)); + } else { + unitData.set("roleId", 1); + unitData.set("professionId", 2); + unitData.set("camp", 1); + unitData.set("superSkill", getTestSkill(false)); + unitData.set("property", getTestProperty(false)); } return unitData; } @@ -93,15 +266,16 @@ public class FightDataUtil { 1d, 10000d, 10000d, 169d, 271d, 95d, 176d, 0d, 0d, 0.3, 0.15, 0.3, 1.5, 1d, 0.05, 0d, 0d, 0d, 0d, 0d, 0.05, 0d, 0d, 0d, 0d, 0d }; + private static LuaValue getTestProperty(boolean isHero) { LuaValue property = new LuaTable(); - if (isHero){ + if (isHero) { for (int i = 1; i <= propertyHero.length; i++) { - property.rawset(i,LuaValue.valueOf(propertyHero[i-1])); + property.rawset(i, LuaValue.valueOf(propertyHero[i - 1])); } - }else { + } else { for (int i = 1; i <= propertyEm.length; i++) { - property.rawset(i,LuaValue.valueOf(propertyEm[i-1])); + property.rawset(i, LuaValue.valueOf(propertyEm[i - 1])); } } return property; @@ -113,55 +287,37 @@ public class FightDataUtil { //{ 0.5, {20011, 0.7,{1, 0.1, 1}}} private static LuaValue getTestSkill(boolean notNull) { LuaValue skill = new LuaTable(); - if (notNull){ - skill.rawset(1,LuaValue.valueOf(0.5)); - skill.rawset(2,getTestEffect()); + if (notNull) { + skill.rawset(1, LuaValue.valueOf(0.5)); + skill.rawset(2, getTestEffect()); } return skill; } private static LuaValue getTestEffect() { LuaValue effect = new LuaTable(); - effect.rawset(1,LuaValue.valueOf(20011)); - effect.rawset(2,LuaValue.valueOf(0.7)); - effect.rawset(3,getTestEffectArgs()); + effect.rawset(1, LuaValue.valueOf(20011)); + effect.rawset(2, LuaValue.valueOf(0.7)); + effect.rawset(3, getTestEffectArgs()); return effect; } private static LuaValue getTestEffectArgs() { LuaValue effectArgs = new LuaTable(); - effectArgs.rawset(1,LuaValue.valueOf(1)); - effectArgs.rawset(2,LuaValue.valueOf(0.1)); - effectArgs.rawset(3,LuaValue.valueOf(1)); + effectArgs.rawset(1, LuaValue.valueOf(1)); + effectArgs.rawset(2, LuaValue.valueOf(0.1)); + effectArgs.rawset(3, LuaValue.valueOf(1)); return effectArgs; } private static LuaValue getTestPlayerData() { LuaValue playerData = new LuaTable(); for (int i = 1; i <= 5; i++) { - playerData.rawset(i,getTestFightUnit(true)); + playerData.rawset(i, getTestFightUnit(true)); } return playerData; } - /** - * 组装操作数据 - * @param data - * @return - */ - public static LuaValue getOptionData(String data) { - String[] tempData1 = data.split("\\|"); - LuaValue tableA = new LuaTable(); - for (int i = 0; i < tempData1.length; i++) { - String[] tempData2 = tempData1[i].split("#"); - LuaValue tableB = new LuaTable(); - for (int j = 0; j < tempData2.length; j++) { - tableB.rawset(j+1,LuaValue.valueOf(Integer.parseInt(tempData2[j]))); - } - tableA.rawset(i+1,tableB); - } - return tableA; - } // public static void main(String[] args) throws Exception { // String optionData = "14#1#0|132#2#3|152#2#5|178#3#2|219#2#4|260#3#1|287#2#2|312#3#5|467#1#1";