From 3ee89d5862193cc0f5849b8a13d32b72ffca717b Mon Sep 17 00:00:00 2001 From: wangyuan Date: Mon, 2 Sep 2019 14:17:54 +0800 Subject: [PATCH] add bloody --- .../ljsd/jieling/battle/BattleManager.java | 80 +++++++++++++++++++ .../ljsd/jieling/battle/actor/BufferType.java | 19 +++++ .../ljsd/jieling/battle/actor/Creature.java | 44 ++++++---- .../jieling/battle/actor/EffectBuffer.java | 4 + .../ljsd/jieling/battle/actor/EventType.java | 2 + .../com/ljsd/jieling/battle/actor/Life.java | 3 + .../com/ljsd/jieling/battle/actor/Scene.java | 61 +++++++++++++- .../ljsd/jieling/battle/actor/SceneActor.java | 71 +++++++++++++--- .../ljsd/jieling/battle/actor/StateType.java | 2 + .../ljsd/jieling/battle/room/BeanToProto.java | 6 ++ .../jieling/battle/room/SceneManager.java | 45 +++++++++-- .../jieling/config/SBloodyBattleSetting.java | 34 ++++++++ .../ljsd/jieling/config/SEquipTalismana.java | 67 ++++++++++++++++ .../jieling/config/SEquipTalismanaRankup.java | 43 ++++++++++ .../ljsd/jieling/logic/fight/CombatLogic.java | 2 +- .../jieling/logic/hero/HeroAttributeEnum.java | 1 + .../java/com/ljsd/jieling/util/MathUtils.java | 16 ++++ 17 files changed, 464 insertions(+), 36 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/battle/actor/BufferType.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismana.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaRankup.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/BattleManager.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/BattleManager.java index 4a1ebecd9..4abaeae8a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/BattleManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/BattleManager.java @@ -8,6 +8,9 @@ import com.ljsd.jieling.battle.actor.Life; import com.ljsd.jieling.battle.actor.SceneMonster; import com.ljsd.jieling.config.SArenaSetting; import com.ljsd.jieling.config.SBloodyBattleSetting; +import com.ljsd.jieling.config.SFoodsConfig; +import com.ljsd.jieling.config.SPropertyConfig; +import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; import com.ljsd.jieling.logic.blood.BloodLogic; @@ -16,6 +19,7 @@ import com.ljsd.jieling.logic.dao.Hero; import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.fight.CheckFight; +import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.fight.FightType; import com.ljsd.jieling.logic.hero.HeroAttributeEnum; import com.ljsd.jieling.logic.hero.HeroLogic; @@ -175,4 +179,80 @@ public class BattleManager { .build(); } + + /** + * result :1 血量变化 + * @param uid + * @param foodId + */ + public static Map eatBuffer(int uid,int foodId,int optionalParm){ + SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; + Map debuffMap = sBloodyBattleSetting.getDebuffMap(); + SFoodsConfig sFoodsConfig = SFoodsConfig.getsFoodsConfigByFoodId(foodId); + int target = sFoodsConfig.getTarget(); + Map result = new HashMap<>(1); + if(target == 1){ + UserBloodySnpInfo redUserBloodySnpInfo = bloodMyHeroInfoMap.get(uid); + int limmitValue = debuffMap.get(foodId)[1]; + int resultValue = 0; + Map foddAddResult = new HashMap<>(); + CombatLogic.getInstance().getFoodAttributeAdd(GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON,foddAddResult,sFoodsConfig); + Map heroAllAttributes = redUserBloodySnpInfo.getHeroAllAttributes(); + for(FamilyHeroInfo familyHeroInfo : heroAllAttributes.values()){ + Map attribute = familyHeroInfo.getAttribute(); + int maxHp = attribute.get(HeroAttributeEnum.Hp.getPropertyId()); // 我的最大生命值 + int curHp = attribute.get(HeroAttributeEnum.CurHP.getPropertyId()); // 我的生命值 + int minCurHp =(int)( maxHp*(limmitValue/10000F)); + if(curHp<=0){ + continue; + } + if(curHp<=minCurHp){ + resultValue+=curHp; + continue; + } + + if(foddAddResult.containsKey(HeroAttributeEnum.CurHpSpecialExtra.getPropertyId())){ + Integer specailValue = foddAddResult.get(HeroAttributeEnum.CurHpSpecialExtra.getPropertyId()); + SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(HeroAttributeEnum.CurHpSpecialExtra.getPropertyId()); + int style = sPropertyConfig.getStyle(); + if(style == GlobalsDef.PERCENT_TYPE){ + curHp =(int)( maxHp/10000F*specailValue); + }else{ + curHp +=specailValue; + } + } + boolean needResetHp=false; + if(curHpplayerMaxSpeed){ + temp=playerMaxSpeed; + }else if(temp excludeAttackState = new HashSet<>(2); + static { + excludeAttackState.add(StateType.FROZEN); + excludeAttackState.add(StateType.INVINCIBLE); + } + public Creature(){ setStateType(StateType.MOVEABLE); } - public void setMineral(int mineral) { - this.mineral = mineral; + public void costMineral(int mineral) { + this.mineral -= mineral; } public void tick(){ @@ -141,6 +147,12 @@ public abstract class Creature extends SceneActor{ setPos(path.remove(0)); if(getType() == ActorType.Monster){ cachePath.push(getPos()); + }else{ + Integer pathMieral = getScene().getPathMieral(getPos()); + if(pathMieral!=null){ + this.addMineral(pathMieral); + getScene().processEventUpdate(EventType.SCENEACTORE_UPDATE,getId()); + } } if(checkEventTrigger(timestamp)){ break; @@ -156,7 +168,10 @@ public abstract class Creature extends SceneActor{ public boolean canMoveNext(int nextPath,boolean update){ for(SceneActor sceneActor : getScene().getSceneActorMap().values()){ - if(sceneActor == this) { + if(sceneActor == this ) { + continue; + } + if(sceneActor.getType() == ActorType.Player && sceneActor.getStateType() == StateType.INVINCIBLE){ continue; } if(sceneActor.getType()!=ActorType.Mineral && sceneActor.getPos() == nextPath){ @@ -177,8 +192,6 @@ public abstract class Creature extends SceneActor{ //打断自己行使路线 广播自己状态 位置信息 this.preMoveTimestamp = timestamp; if(this.getType() != ActorType.Monster){ - /*Collections.reverse(path); - cachePath.addAll(path);*/ this.path.clear(); } @@ -208,35 +221,36 @@ public abstract class Creature extends SceneActor{ int curPos = getPos(); boolean result= false; ActorType type = sceneActor.getType(); - int triggerEvent = 0; + //int triggerEvent = 0; + int triggerBuffer = 0; if(type == ActorType.Npc){ if(curPos == sceneActor.getPos()){ - triggerEvent=1; + triggerBuffer=1; } } if(type == ActorType.Mineral && this.getType() == ActorType.Player){ if(curPos == sceneActor.getPos()){ - triggerEvent=2; + triggerBuffer=BufferType.DIGGER.getType(); setStateType(StateType.DIGGER); } } if(type == ActorType.Monster || type == ActorType.Player){ - if(getStateType()!=StateType.FROZEN &&sceneActor.getStateType()!= StateType.FROZEN&& xySet.contains(sceneActor.getPos())){ - triggerEvent=3; + if(!excludeAttackState.contains(getStateType()) && !excludeAttackState.contains(sceneActor.getStateType()) && xySet.contains(sceneActor.getPos()) ){ + triggerBuffer=BufferType.BATTLE.getType(); setStateType(StateType.FROZEN); //异步计算战斗结果 getScene().execASync(new BattleRequest(timestamp,this,sceneActor,sceneActor.getType())); LOGGER.info("the attackUid={},the battleId={}",this.getId(),sceneActor.getId()); } } - if(triggerEvent!=0){ - if(triggerEvent == 3 || this.getType() == ActorType.Player){ - EffectBuffer effectBuffer = new EffectBuffer(getScene().getBufferId(),triggerEvent, timestamp, -1,getId(), sceneActor.getId(), -1); + if(triggerBuffer!=0){ + if(triggerBuffer == 3 || this.getType() == ActorType.Player){ + EffectBuffer effectBuffer = new EffectBuffer(getScene().getBufferId(),triggerBuffer, timestamp, -1,getId(), sceneActor.getId(), -1); whenTriggerEvent(effectBuffer,timestamp); result = true; } - if(triggerEvent == 3 ){ - EffectBuffer othereffectBuffer = new EffectBuffer(getScene().getBufferId(),triggerEvent, timestamp, -1,sceneActor.getId(),getId(), -1); + if(triggerBuffer == 3 ){ + EffectBuffer othereffectBuffer = new EffectBuffer(getScene().getBufferId(),triggerBuffer, timestamp, -1,sceneActor.getId(),getId(), -1); sceneActor.whenTriggerEvent(othereffectBuffer,timestamp); result = true; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EffectBuffer.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EffectBuffer.java index f72fca8ef..ef7fc3c31 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EffectBuffer.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EffectBuffer.java @@ -27,6 +27,10 @@ public class EffectBuffer { this.values.add(value); } + public void updateEffectValue(int index,int value){ + this.values.set(index,value); + } + public int getId() { return id; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EventType.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EventType.java index 44c60d125..cf5aaf9bd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EventType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/EventType.java @@ -5,5 +5,7 @@ public enum EventType { BUFFER_UPDATE, BUFFER_REMOVE, SCENEACTORE_REMOVE, + POSMINERAL_UPDATE, + POSMINERAL_REMOVE, } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Life.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Life.java index 14c0aeace..e42e4303d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Life.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Life.java @@ -27,6 +27,9 @@ public class Life { return changeValue; } + public void setCurHp(int curHp) { + this.curHp = curHp; + } public int getCurHp() { return curHp; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Scene.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Scene.java index a290f8925..68c92aa60 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Scene.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/Scene.java @@ -15,6 +15,7 @@ import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.SceneFight; import com.ljsd.jieling.util.MathUtils; @@ -40,9 +41,51 @@ public class Scene implements Runnable{ private BlockingUniqueQueue commandBlockingUniqueQueue = new BlockingUniqueQueue<>(); private Map minealForPosMap = new HashMap<>(); + public Map getMinealForPosMap() { + return minealForPosMap; + } + + public Integer getPathMieral(int pos){ + return minealForPosMap.remove(pos); + } + + + public void randomMineralOfUserDeath(Creature creature,int totalMineal){ + if(totalMineal <=0){ + return; + } + int maxPoss = SBloodyBattleSetting.sBloodyBattleSetting.getMonsterDrop()[1]; + Set possiblePosSet = SceneManager.selectForPlayerMineal(this, creature.getPos()); + int size = possiblePosSet.size(); + int reallyPos = maxPoss>size?size:maxPoss; + reallyPos = reallyPos>totalMineal?totalMineal:reallyPos; + int a = totalMineal/reallyPos; + int b = totalMineal%reallyPos; + Iterator iterator = possiblePosSet.iterator(); + int nums = 0; + while (iterator.hasNext()){ + int extra = nums0){ + processEventUpdate(EventType.SCENEACTORE_UPDATE,sceneActor.getId()); + } } public void addCommand(Command command){ @@ -124,6 +167,12 @@ public class Scene implements Runnable{ int deadId = (int) parm; builder.addRemoveActorId(deadId); break; + case POSMINERAL_REMOVE: + builder.addRemovePosMineralId( (int) parm); + break; + case POSMINERAL_UPDATE: + builder.addPosMineral((CommonProto.PosMineral)parm); + break; } } @@ -139,6 +188,7 @@ public class Scene implements Runnable{ break; } tick++; + sysTick(); tick(); if(tick/20 == 1 && tick%20==0){ startAllRunning(); @@ -174,7 +224,7 @@ public class Scene implements Runnable{ if(nums == null){ nums = 0; } - mineralNums.put(size,nums); + mineralNums.put(size,nums+1); } } for(int[] mineralCeilingSingle :mineralCeiling){ @@ -189,8 +239,13 @@ public class Scene implements Runnable{ existNums = 0; } //新增矿点 - if(maxNums > existNums){ - + int needAdd = maxNums -existNums; + if(needAdd>0){ + if(needAdd>flushNums){ + needAdd = flushNums; + } + SceneManager.createMinear(this,size,needAdd); + System.out.println("创建矿...."); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneActor.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneActor.java index 6e86fbf10..5c574ceb0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneActor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneActor.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.battle.actor; +import com.ljsd.jieling.battle.BattleManager; import com.ljsd.jieling.battle.room.SceneManager; import com.ljsd.jieling.config.SBloodyBattleSetting; @@ -30,16 +31,20 @@ public abstract class SceneActor{ } public void addOrUpdateBuffer(EffectBuffer effectBuffer){ - bufferMap.put(effectBuffer.getId(),effectBuffer); + System.out.println(effectBuffer); - if(effectBuffer.getType() == 3){ + if(effectBuffer.getType() == BufferType.BATTLE.getType()){ stateType = StateType.FROZEN; scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId()); + //停止挖矿 + checkUpdateBuffer(effectBuffer.getStartTime(),true); System.out.println("the actor" + id + "is frozen"); } - if(effectBuffer.getType() == 2){ + if(effectBuffer.getType() == BufferType.DIGGER.getType()){ + effectBuffer.updateEffectValue(0,0); scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId()); } + bufferMap.put(effectBuffer.getId(),effectBuffer); scene.processEventUpdate(EventType.BUFFER_UPDATE,effectBuffer); } @@ -53,12 +58,12 @@ public abstract class SceneActor{ while (iterator.hasNext()){ Map.Entry next = iterator.next(); EffectBuffer value = next.getValue(); - if(value.getType() ==3 && value.getEndTime() == -1){ + if(value.getType() == BufferType.BATTLE.getType() && value.getEndTime() == -1){ continue; } - if(value.getType() == 2){ //挖矿 + if(value.getType() == BufferType.DIGGER.getType()){ //挖矿 int intervalMs = SBloodyBattleSetting.sBloodyBattleSetting.getCollectingInterval() * 1000; - int willDgger = (int)((now - value.getStartTime()) / intervalMs); + int willDgger = (int)((now - value.getStartTime()) / intervalMs)-value.getValues().get(0); Creature creature = (Creature) this; Creature mineral =(Creature) scene.getSceneActorMap().get(value.getCaster()); if(willDgger>0&&mineral.getLife().getCurHp()>0) { @@ -68,14 +73,46 @@ public abstract class SceneActor{ if(mineral.getLife().getCurHp()>0){ scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,mineral.getId()); } - value.setStartTime(value.getStartTime() + reallyDigger*intervalMs); + value.updateEffectValue(0,reallyDigger + value.getValues().get(0)); } + int[][] debuffs = SBloodyBattleSetting.sBloodyBattleSetting.getDebuff(); + for(int i=0;ivalue.getValues().get(i+1); + if(willEat){ + Map resultMap = BattleManager.eatBuffer(id, bufferId, creature.getSpeed()); + if(resultMap.containsKey(1)){ + //更新血量 + Integer totalCurHp = resultMap.get(1); + creature.getLife().setCurHp(totalCurHp); + scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,value.getId()); + }else{ + Integer speedTemp = resultMap.get(2); + if(creature.getSpeed()!=speedTemp){ + creature.setSpeed(speedTemp); + scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,value.getId()); + } + } + value.updateEffectValue(0,value.getValues().get(i+1) +1); + } + + } + if(needRemoveDigger || mineral.getLife().getCurHp()<=0 ){ iterator.remove(); if(mineral.getLife().getCurHp()<=0){ scene.processEventUpdate(EventType.SCENEACTORE_REMOVE,value.getCaster()); } System.out.println("remove the digger buffer" + getId()); + int[][] debuff = SBloodyBattleSetting.sBloodyBattleSetting.getDebuff(); + for(int[] debuffItem : debuff){ + int duration = debuffItem[3]; + if(duration>0){ + addOrUpdateBuffer(new EffectBuffer(scene.getBufferId(),BufferType.REMOVEBUFFER.getType(),now,now + duration*1000,id,id,0)); + } + } scene.processEventUpdate(EventType.BUFFER_REMOVE,value.getId()); } continue; @@ -95,7 +132,7 @@ public abstract class SceneActor{ public void whenBufferRemove(EffectBuffer value,long now){ int type = value.getType(); - if(type == 3){ + if(type == BufferType.BATTLE.getType()){ int effectValue = value.getValues().get(0); if(effectValue == 0){ //战斗失败 if(getType() == ActorType.Monster){ @@ -115,25 +152,37 @@ public abstract class SceneActor{ int mineral = creature.getMineral(); if(mineral>1){ int gainMineral=mineral/2 + mineral%2; - creature.setMineral(mineral -gainMineral); + creature.costMineral(mineral -gainMineral); scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,creature.getId()); if(this.getType() == ActorType.Player){ ((Creature)this).addMineral(gainMineral); }else{ - //todo 随机散落 + scene.randomMineralOfUserDeath(creature,gainMineral); } } } stateType = StateType.MOVEABLE; + ((Creature)this).setPreMoveTimestamp(now); scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId()); } - }else if(type == 4){ + }else if(type == BufferType.REBIRTH.getType()){ if(getType() == ActorType.Monster){ Creature creature = (Creature) this; creature.setPreMoveTimestamp(now); } stateType = StateType.MOVEABLE; + if(getType() == ActorType.Player){ + //如果是玩家获得无敌buffer + addOrUpdateBuffer(new EffectBuffer(scene.getBufferId(),BufferType.INVINCIBLE.getType(),now,now+SBloodyBattleSetting.sBloodyBattleSetting.getInvincible(),id,id,-1)); + stateType=StateType.INVINCIBLE; + } + scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId()); + }else if(type == BufferType.INVINCIBLE.getType() ){ + stateType=StateType.MOVEABLE; + } else if(type == BufferType.REMOVEBUFFER.getType() ){ + Creature creature = (Creature) this; + creature.setSpeed(SBloodyBattleSetting.sBloodyBattleSetting.getPlayerSpeed()); scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId()); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/StateType.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/StateType.java index a535dc019..8a3237e7a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/StateType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/StateType.java @@ -7,6 +7,8 @@ public enum StateType { FROZEN(4), //不可移动 MOVEABLE(5), //可移动 DIGGER(5), //可移动 + INVINCIBLE(5), //无敌 + ; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/room/BeanToProto.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/room/BeanToProto.java index 3e690b088..3fea038b1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/room/BeanToProto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/room/BeanToProto.java @@ -80,6 +80,12 @@ public class BeanToProto { builder.addActorEffectBufferInfo(getActorEffectBufferInfo(next.getValue())); } } + Map minealForPosMap = scene.getMinealForPosMap(); + for(Map.Entry item : minealForPosMap.entrySet()){ + Integer key = item.getKey(); + Integer value = item.getValue(); + builder.addPosMineral(CommonProto.PosMineral.newBuilder().setPos(key).setNums(value).build()); + } builder.addAllBarrierPoint(SceneManager.bloodyMap.getBarrierPoints()); return builder.build(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/room/SceneManager.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/room/SceneManager.java index 4d73ecf71..23fae70c1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/room/SceneManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/room/SceneManager.java @@ -49,14 +49,16 @@ public class SceneManager { } } int[][] mineralCeiling = SBloodyBattleSetting.sBloodyBattleSetting.getMineralCeiling(); - int min =999999999; - for(int[] mineralCeilingSingle : mineralCeiling){ - int minRound = mineralCeilingSingle[1]; - if(min < minRound){ - min = minRound; + int max =mineralCeiling[0][1]; + for(int i=1;i selectForPlayerMineal(Scene scene,int deathPos){ + SChallengeMapConfig sChallengeMapConfig = SChallengeMapConfig.integerSChallengeMapConfigMap.get(bloodyMap.getMapId()); + int[] size = sChallengeMapConfig.getSize(); + int maxX = size[0]; + int maxY = size[1]; + SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; + int selectNums = sBloodyBattleSetting.getMonsterDrop()[1]; + int[] xy = CellUtil.pos2XY(deathPos); + Set cache = new HashSet<>(); + CellUtil.calSurPos(xy[0],xy[1],sBloodyBattleSetting.getMonsterDrop()[0],maxX,maxY,cache); + List excludePosList = new ArrayList<>(); + Map sceneActorMap = scene.getSceneActorMap(); + for(SceneActor sceneActor : sceneActorMap.values()){ + int pos = sceneActor.getPos(); + excludePosList.add(pos); + } + cache.removeAll(excludePosList); + cache.removeAll(bloodyMap.getBarrierPoints()); + if(cache.isEmpty()){ + cache.add(deathPos); + } + return cache; + + } + + //玩家阵亡选择出生点 public static int selectForPlayerRebirth(Scene scene){ List excludePosList = new ArrayList<>(); Map sceneActorMap = scene.getSceneActorMap(); @@ -347,6 +377,9 @@ public class SceneManager { } } + + + public static void main(String[] args) throws InterruptedException { createScene(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java index 4c8ae2a11..d54c5bd93 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java @@ -67,6 +67,14 @@ public class SBloodyBattleSetting implements BaseConfig { private int[] fightTime; + private int[] monsterDrop; + + private int playerMaxSpeed; + + private int playerMinSpeed; + + private Map debuffMap; + @Override public void init() throws Exception { @@ -94,6 +102,11 @@ public class SBloodyBattleSetting implements BaseConfig { for(int[] mineralCeilingSingle : sBloodyBattleSettingTmp.getMineralCeiling()){ mineralCeilingMapTmp.put(mineralCeilingSingle[0],mineralCeilingSingle); } + Map debuffMapTmp = new HashMap<>(); + for(int[] debuffItem : sBloodyBattleSettingTmp.getDebuff()){ + debuffMapTmp.put(debuffItem[0],debuffItem); + } + sBloodyBattleSettingTmp.setDebuffMap(debuffMapTmp); sBloodyBattleSettingTmp.setMonsterPotrolPaths(monsterPotrolPaths); sBloodyBattleSettingTmp.setInitializeMineMap(initializeMineMapTmp); sBloodyBattleSettingTmp.setMineralCeilingMap(mineralCeilingMapTmp); @@ -224,4 +237,25 @@ public class SBloodyBattleSetting implements BaseConfig { public int[] getFightTime() { return fightTime; } + + public int[] getMonsterDrop() { + return monsterDrop; + } + + + public Map getDebuffMap() { + return debuffMap; + } + + public void setDebuffMap(Map debuffMap) { + this.debuffMap = debuffMap; + } + + public int getPlayerMaxSpeed() { + return playerMaxSpeed; + } + + public int getPlayerMinSpeed() { + return playerMinSpeed; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismana.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismana.java new file mode 100644 index 000000000..1876e53c7 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismana.java @@ -0,0 +1,67 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="EquipTalismana") +public class SEquipTalismana implements BaseConfig { + + private int id; + + private int talismanaId; + + private int level; + + private int[][] rankupBasicMaterial; + + private int[][] rankupConsumeMaterial; + + private int[][] property; + + private int[][] specialProperty; + + private int openSkillRules; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getTalismanaId() { + return talismanaId; + } + + public int getLevel() { + return level; + } + + public int[][] getRankupBasicMaterial() { + return rankupBasicMaterial; + } + + public int[][] getRankupConsumeMaterial() { + return rankupConsumeMaterial; + } + + public int[][] getProperty() { + return property; + } + + public int[][] getSpecialProperty() { + return specialProperty; + } + + public int getOpenSkillRules() { + return openSkillRules; + } + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaRankup.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaRankup.java new file mode 100644 index 000000000..037216581 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaRankup.java @@ -0,0 +1,43 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="EquipTalismanaRankup") +public class SEquipTalismanaRankup implements BaseConfig { + + private int id; + + private int issame; + + private int starLimit; + + private int isId; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getIssame() { + return issame; + } + + public int getStarLimit() { + return starLimit; + } + + public int getIsId() { + return isId; + } + + +} \ No newline at end of file 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 21efdd77c..5966ac95d 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 @@ -163,7 +163,7 @@ public class CombatLogic { return foddAddResult; } - private void getFoodAttributeAdd(int type, int target, Map foddAddResult, SFoodsConfig sFoodsConfig) { + public void getFoodAttributeAdd(int type, int target, Map foddAddResult, SFoodsConfig sFoodsConfig) { int typeTmp = sFoodsConfig.getType(); int targetTmp = sFoodsConfig.getTarget(); if( typeTmp==type && targetTmp==target ){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroAttributeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroAttributeEnum.java index aa01ae02d..3376cf621 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroAttributeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroAttributeEnum.java @@ -19,6 +19,7 @@ public enum HeroAttributeEnum { AntiCritDamageFactor(60), DifferDemonsBocusFactor(66), CurHpExtra(67), + CurHpSpecialExtra(68), FireDamageBonusFactor(101), WindDamageBonusFactor(102), WaterDamageBonusFactor(103), diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MathUtils.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MathUtils.java index eacddca3e..b16d6d710 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MathUtils.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MathUtils.java @@ -273,4 +273,20 @@ public class MathUtils { return randomIndex; } + //计算最大公约数 + public static int getGCD(int a,int b){ + if(a<0 || b<0){ + return -1; + } + if(b==0){ + return a; + } + while (a%b!=0){ + int temp = a % b; + a = b; + b = temp; + } + return b; + } + }