From e8b835207bf667b32af3b99cabf9f08931874e51 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Mon, 2 Sep 2019 19:51:20 +0800 Subject: [PATCH] walk --- .../ljsd/jieling/battle/BattleManager.java | 20 ++++++------ .../ljsd/jieling/battle/actor/Creature.java | 8 ++++- .../com/ljsd/jieling/battle/actor/Scene.java | 32 +++++++++++++++---- .../ljsd/jieling/battle/actor/SceneActor.java | 18 ++++++++--- .../ljsd/jieling/battle/actor/SceneNpc.java | 1 - .../jieling/battle/room/SceneManager.java | 28 +++++++++++----- .../jieling/config/SBloodyBattleSetting.java | 19 +++++++++++ 7 files changed, 94 insertions(+), 32 deletions(-) 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 4abaeae8a..e7f63a395 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/BattleManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/BattleManager.java @@ -216,20 +216,18 @@ public class BattleManager { SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(HeroAttributeEnum.CurHpSpecialExtra.getPropertyId()); int style = sPropertyConfig.getStyle(); if(style == GlobalsDef.PERCENT_TYPE){ - curHp =(int)( maxHp/10000F*specailValue); + curHp =curHp+(int)( maxHp/10000F*specailValue); }else{ curHp +=specailValue; } } - boolean needResetHp=false; if(curHpplayerMaxSpeed){ - temp=playerMaxSpeed; - }else if(tempplayerMinSpeed){ temp=playerMinSpeed; + }else if(temp xySet = CellUtil.getSurroundPos(15,20,curPos); + SChallengeMapConfig sChallengeMapConfig = SChallengeMapConfig.integerSChallengeMapConfigMap.get(SceneManager.bloodyMap.getMapId()); + int[] size = sChallengeMapConfig.getSize(); + int maxX = size[0]; + int maxY = size[1]; + Set xySet = CellUtil.getSurroundPos(maxX,maxY,curPos); Map sceneActorMap = scene.getSceneActorMap(); for(SceneActor sceneActor : sceneActorMap.values()){ if(sceneActor == this) { 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 68c92aa60..c3ab65757 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 @@ -18,7 +18,6 @@ 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; import com.ljsd.jieling.util.MessageUtil; import java.util.*; @@ -104,8 +103,31 @@ public class Scene implements Runnable{ private boolean isEnd; + private Map monsterRecoryMap = new HashMap<>(); + public void monsterReflush(){ + Iterator> iterator = monsterRecoryMap.entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + Integer value = next.getValue(); + if(tick>value){ + Integer monsterIndex = next.getKey(); + System.out.println("the actor siz=" + sceneActorMap.size()); + SceneManager.createMonster(this,monsterIndex); + processEventUpdate(EventType.SCENEACTORE_UPDATE,monsterIndex); + iterator.remove(); + System.out.println("the actor after siz=" + sceneActorMap.size()); + System.out.println("the monsterid={}" + monsterIndex + "recovery"); + } + } + } + + public void whenMonsterDead(int deadId){ + System.out.println("the monster deadID="+deadId); + SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; + int[] monsterItem = sBloodyBattleSetting.getMonsterIndexMap().get(deadId); + monsterRecoryMap.put(deadId,monsterItem[1]*20 + tick); } @@ -210,6 +232,7 @@ public class Scene implements Runnable{ } public void sysTick(){ + monsterReflush(); int round = SceneManager.bloodyMap.getRound(); if( tick % round != 0){ return; @@ -293,14 +316,12 @@ public class Scene implements Runnable{ defActor = attackActor; attackActor = temp; } - /* if(defActor.getType() == ActorType.Monster || attackActor.getType() == ActorType.Monster){ + if(defActor.getType() == ActorType.Monster || attackActor.getType() == ActorType.Monster){ checkResult = BattleManager.battleOfP2M((Creature) attackActor, (SceneMonster) defActor); }else{ checkResult = BattleManager.battleOfP2P((Creature) attackActor, (Creature) defActor); - }*/ + } int[] fightTime = SBloodyBattleSetting.sBloodyBattleSetting.getFightTime(); - //todo - checkResult = new int[]{0,1000,200,0,0,0,0}; int displayTime = checkResult[1] / fightTime[0]; if(displayTime>fightTime[2]){ displayTime = fightTime[2]; @@ -308,7 +329,6 @@ public class Scene implements Runnable{ if(displayTime bufferMap = attackActor.getBufferMap(); for(EffectBuffer effectBuffer : bufferMap.values()){ if(effectBuffer.getType() == 3 && effectBuffer.getTarget() == attackActor.getId() && effectBuffer.getCaster() == defActor.getId()){ 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 5c574ceb0..7f7ae2431 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 @@ -42,6 +42,10 @@ public abstract class SceneActor{ } if(effectBuffer.getType() == BufferType.DIGGER.getType()){ effectBuffer.updateEffectValue(0,0); + int[][] debuff = SBloodyBattleSetting.sBloodyBattleSetting.getDebuff(); + for(int i=0;ivalue.getValues().get(i+1); + boolean willEat = ((now - value.getStartTime()) / duration/1000)>value.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()); + if(totalCurHp!=creature.getLife().getCurHp()){ + creature.getLife().setCurHp(totalCurHp); + scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,value.getId()); + } }else{ Integer speedTemp = resultMap.get(2); if(creature.getSpeed()!=speedTemp){ @@ -95,7 +101,8 @@ public abstract class SceneActor{ scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,value.getId()); } } - value.updateEffectValue(0,value.getValues().get(i+1) +1); + value.updateEffectValue(i+1,value.getValues().get(i+1) +1); + } } @@ -136,6 +143,7 @@ public abstract class SceneActor{ int effectValue = value.getValues().get(0); if(effectValue == 0){ //战斗失败 if(getType() == ActorType.Monster){ + scene.whenMonsterDead(id); scene.processEventUpdate(EventType.SCENEACTORE_REMOVE,this.getId()); return; } @@ -147,7 +155,7 @@ public abstract class SceneActor{ }else{ Creature creature = (Creature) scene.getSceneActorMap().get(value.getCaster()); if(creature.getType() == ActorType.Monster){ - ((Creature)this).addMineral(SBloodyBattleSetting.sBloodyBattleSetting.getMonster()[creature.getId()][2]); + ((Creature)this).addMineral(SBloodyBattleSetting.sBloodyBattleSetting.getMonster()[creature.getId()-1][2]); }else{ int mineral = creature.getMineral(); if(mineral>1){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneNpc.java b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneNpc.java index 61c320505..e9e9f1b7a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneNpc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/battle/actor/SceneNpc.java @@ -1,6 +1,5 @@ package com.ljsd.jieling.battle.actor; -import java.util.List; public class SceneNpc extends Creature{ @Override 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 23fae70c1..b2251d7eb 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 @@ -95,13 +95,28 @@ public class SceneManager { } //创建矿点 createMinear(scene,-1,1); - //创建怪物 + createMonster(scene,-1); + + sceneMap.put(room.getId(),scene); + + //todo 发送到redis,房间服务器去这里拿数据 + + MessageUtil.sendRoomMatchSuccessIndication(scene); + } + + public static void createMonster(Scene scene, int target) { + //创建怪物 + SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; int[][] monster = sBloodyBattleSetting.getMonster(); int[][][] monsterPatrol = sBloodyBattleSetting.getMonsterPatrol(); Map> monsterPotrolPaths = sBloodyBattleSetting.getMonsterPotrolPaths(); int monsterIndex = 0; for(int[] monsterSingle : monster){ + if(target!=-1 && target != monsterIndex +1){ + monsterIndex++; + continue; + } SceneMonster sceneMonster = new SceneMonster(); sceneMonster.setScene(scene); sceneMonster.setId(monsterIndex+1); @@ -129,17 +144,15 @@ public class SceneManager { scene.addCommand(commandC); scene.addScenActor(sceneMonster); monsterIndex++; + if(target!=-1){ + System.out.println("find and break... " + monsterIndex); + break; + } break; } - sceneMap.put(room.getId(),scene); - - //todo 发送到redis,房间服务器去这里拿数据 - - MessageUtil.sendRoomMatchSuccessIndication(scene); } - public static void createMinear(Scene scene,int target,int nums){ //创建矿点 SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; @@ -337,7 +350,6 @@ public class SceneManager { 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); 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 d54c5bd93..9ac552bf2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java @@ -73,7 +73,10 @@ public class SBloodyBattleSetting implements BaseConfig { private int playerMinSpeed; + private int[][] mineralId; + private Map debuffMap; + private Map monsterIndexMap; @Override @@ -106,6 +109,13 @@ public class SBloodyBattleSetting implements BaseConfig { for(int[] debuffItem : sBloodyBattleSettingTmp.getDebuff()){ debuffMapTmp.put(debuffItem[0],debuffItem); } + + Map monsterIndexMapTmp = new HashMap<>(); + int i=1; + for(int[] monsterItem : sBloodyBattleSettingTmp.getMonster()){ + monsterIndexMapTmp.put(i++,monsterItem); + } + sBloodyBattleSettingTmp.setMonsterIndexMap(monsterIndexMapTmp); sBloodyBattleSettingTmp.setDebuffMap(debuffMapTmp); sBloodyBattleSettingTmp.setMonsterPotrolPaths(monsterPotrolPaths); sBloodyBattleSettingTmp.setInitializeMineMap(initializeMineMapTmp); @@ -258,4 +268,13 @@ public class SBloodyBattleSetting implements BaseConfig { public int getPlayerMinSpeed() { return playerMinSpeed; } + + + public Map getMonsterIndexMap() { + return monsterIndexMap; + } + + public void setMonsterIndexMap(Map monsterIndexMap) { + this.monsterIndexMap = monsterIndexMap; + } } \ No newline at end of file