fix goods
parent
5dde031242
commit
a142e3d3d8
|
@ -44,12 +44,17 @@ public abstract class Creature extends SceneActor{
|
||||||
setStateType(StateType.MOVEABLE);
|
setStateType(StateType.MOVEABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setMineral(int mineral) {
|
||||||
|
this.mineral = mineral;
|
||||||
|
}
|
||||||
|
|
||||||
public void tick(){
|
public void tick(){
|
||||||
move(null);
|
move(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMineral(int mineral) {
|
public void addMineral(int mineral) {
|
||||||
this.mineral = mineral;
|
this.mineral += mineral;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void exec(int tyep, Object parm){
|
public void exec(int tyep, Object parm){
|
||||||
|
@ -66,10 +71,22 @@ public abstract class Creature extends SceneActor{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean checkCommand(int commandType,Object parm){
|
public boolean checkCommand(int commandType,Object parm){
|
||||||
|
path.clear();
|
||||||
|
getScene().processEventUpdate(EventType.SCENEACTORE_UPDATE,getId());
|
||||||
boolean result = super.checkCommand(commandType,parm);
|
boolean result = super.checkCommand(commandType,parm);
|
||||||
if(result){
|
if(result){
|
||||||
if(commandType == 1){
|
if(commandType == 1){
|
||||||
return CellUtil.isContinuous(getPos(), (List<Integer>) parm);
|
List<Integer> pathTmp = (List<Integer>) parm;
|
||||||
|
System.out.println("the uid="+getId() + " " + pathTmp);
|
||||||
|
System.out.println(getPos());
|
||||||
|
if(getPos()!=pathTmp.get(0)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
boolean continuous = CellUtil.isContinuous(getPos(), (List<Integer>) parm);
|
||||||
|
if(continuous){
|
||||||
|
continuous = canMoveNext(pathTmp.get(1), false);
|
||||||
|
}
|
||||||
|
return continuous;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -78,7 +95,7 @@ public abstract class Creature extends SceneActor{
|
||||||
//用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动
|
//用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动
|
||||||
public void move(List<Integer> path){
|
public void move(List<Integer> path){
|
||||||
long timestamp = System.currentTimeMillis();
|
long timestamp = System.currentTimeMillis();
|
||||||
checkUpdateBuffer(timestamp);
|
checkUpdateBuffer(timestamp,path != null);
|
||||||
if(getStateType() != StateType.MOVEABLE){
|
if(getStateType() != StateType.MOVEABLE){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -126,6 +143,9 @@ public abstract class Creature extends SceneActor{
|
||||||
int oldXY=getPos();
|
int oldXY=getPos();
|
||||||
int pathSize = path.size();
|
int pathSize = path.size();
|
||||||
for(int i=0; i<moveDistance && i<pathSize; i++){
|
for(int i=0; i<moveDistance && i<pathSize; i++){
|
||||||
|
if(!canMoveNext(path.get(0),true)){
|
||||||
|
return getPos();
|
||||||
|
}
|
||||||
setPos(path.remove(0));
|
setPos(path.remove(0));
|
||||||
cachePath.push(getPos());
|
cachePath.push(getPos());
|
||||||
if(checkEventTrigger(timestamp)){
|
if(checkEventTrigger(timestamp)){
|
||||||
|
@ -139,6 +159,24 @@ public abstract class Creature extends SceneActor{
|
||||||
return curPos;
|
return curPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canMoveNext(int nextPath,boolean update){
|
||||||
|
for(SceneActor sceneActor : getScene().getSceneActorMap().values()){
|
||||||
|
if(sceneActor == this) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(sceneActor.getType()!=ActorType.Mineral && sceneActor.getPos() == nextPath){
|
||||||
|
if(update){
|
||||||
|
path.clear();
|
||||||
|
getScene().processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId());
|
||||||
|
System.out.println("can not move next" + getId() + " hit the " + sceneActor.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void whenTriggerEvent(EffectBuffer effectBuffer,long timestamp){
|
public void whenTriggerEvent(EffectBuffer effectBuffer,long timestamp){
|
||||||
this.addOrUpdateBuffer(effectBuffer); //战斗buffer
|
this.addOrUpdateBuffer(effectBuffer); //战斗buffer
|
||||||
//打断自己行使路线 广播自己状态 位置信息
|
//打断自己行使路线 广播自己状态 位置信息
|
||||||
|
@ -149,7 +187,7 @@ public abstract class Creature extends SceneActor{
|
||||||
public boolean checkEventTrigger(long timestamp){
|
public boolean checkEventTrigger(long timestamp){
|
||||||
Scene scene = getScene();
|
Scene scene = getScene();
|
||||||
int curPos = getPos();
|
int curPos = getPos();
|
||||||
Set<Integer> xySet = CellUtil.getSurroundPos(15,15,curPos);
|
Set<Integer> xySet = CellUtil.getSurroundPos(15,20,curPos);
|
||||||
Map<Integer, SceneActor> sceneActorMap = scene.getSceneActorMap();
|
Map<Integer, SceneActor> sceneActorMap = scene.getSceneActorMap();
|
||||||
for(SceneActor sceneActor : sceneActorMap.values()){
|
for(SceneActor sceneActor : sceneActorMap.values()){
|
||||||
if(sceneActor == this) {
|
if(sceneActor == this) {
|
||||||
|
@ -172,32 +210,46 @@ public abstract class Creature extends SceneActor{
|
||||||
triggerEvent=1;
|
triggerEvent=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(type == ActorType.Mineral && !sceneActor.getBufferMap().containsKey(2)){
|
if(type == ActorType.Mineral && this.getType() == ActorType.Player && !checkContainBuffer(2)){
|
||||||
if(curPos == sceneActor.getPos()){
|
if(curPos == sceneActor.getPos()){
|
||||||
triggerEvent=2;
|
triggerEvent=2;
|
||||||
path.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(type == ActorType.Monster || type == ActorType.Player){
|
if(type == ActorType.Monster || type == ActorType.Player){
|
||||||
if(getStateType()!=StateType.FROZEN &&sceneActor.getStateType()!= StateType.FROZEN&& xySet.contains(sceneActor.getPos())){
|
if(getStateType()!=StateType.FROZEN &&sceneActor.getStateType()!= StateType.FROZEN&& xySet.contains(sceneActor.getPos())){
|
||||||
triggerEvent=3;
|
triggerEvent=3;
|
||||||
setStateType(StateType.FROZEN);
|
setStateType(StateType.FROZEN);
|
||||||
if(type != ActorType.Monster){
|
|
||||||
path.clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(triggerEvent!=0){
|
if(triggerEvent!=0){
|
||||||
int randomResult = MathUtils.randomInt(10) > 5 ?0:1;
|
int randomResult = MathUtils.randomInt(10) > 5 ?0:1;
|
||||||
EffectBuffer effectBuffer = new EffectBuffer(getScene().getBufferId(),triggerEvent, timestamp, timestamp + 5000,getId(), sceneActor.getId(), randomResult&1);
|
if(this.getType() == ActorType.Player){
|
||||||
EffectBuffer othereffectBuffer = new EffectBuffer(getScene().getBufferId(),triggerEvent, timestamp, timestamp + 5000,sceneActor.getId(),getId(), randomResult^1);
|
EffectBuffer effectBuffer = new EffectBuffer(getScene().getBufferId(),triggerEvent, timestamp, timestamp + 6000,getId(), sceneActor.getId(), randomResult&1);
|
||||||
whenTriggerEvent(effectBuffer,timestamp);
|
whenTriggerEvent(effectBuffer,timestamp);
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
if(sceneActor.getType() == ActorType.Player){
|
||||||
|
EffectBuffer othereffectBuffer = new EffectBuffer(getScene().getBufferId(),triggerEvent, timestamp, timestamp + 6000,sceneActor.getId(),getId(), randomResult^1);
|
||||||
sceneActor.whenTriggerEvent(othereffectBuffer,timestamp);
|
sceneActor.whenTriggerEvent(othereffectBuffer,timestamp);
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean checkContainBuffer(int type){
|
||||||
|
Map<Integer, EffectBuffer> bufferMap = this.getBufferMap();
|
||||||
|
Iterator<Map.Entry<Integer, EffectBuffer>> iterator = bufferMap.entrySet().iterator();
|
||||||
|
|
||||||
|
while (iterator.hasNext()){
|
||||||
|
Map.Entry<Integer, EffectBuffer> next = iterator.next();
|
||||||
|
if(next.getValue().getType() == type){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void setLife(Life life) {
|
public void setLife(Life life) {
|
||||||
|
|
|
@ -66,4 +66,17 @@ public class EffectBuffer {
|
||||||
public int getType() {
|
public int getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "EffectBuffer{" +
|
||||||
|
"id=" + id +
|
||||||
|
", type=" + type +
|
||||||
|
", startTime=" + startTime +
|
||||||
|
", endTime=" + endTime +
|
||||||
|
", target=" + target +
|
||||||
|
", caster=" + caster +
|
||||||
|
", values=" + values +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,28 +5,36 @@ package com.ljsd.jieling.battle.actor;
|
||||||
public class Life {
|
public class Life {
|
||||||
|
|
||||||
|
|
||||||
private int curMp;
|
private int curHp;
|
||||||
|
|
||||||
private int maxMp;
|
private int maxMp;
|
||||||
|
|
||||||
public Life(int curMp, int maxMp) {
|
public Life(int curMp, int maxMp) {
|
||||||
this.curMp = curMp;
|
this.curHp = curMp;
|
||||||
this.maxMp = maxMp;
|
this.maxMp = maxMp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long reduceHp(int changeValue) {
|
public int reduceHp(int changeValue) {
|
||||||
if (changeValue <= 0) {
|
if (changeValue <= 0) {
|
||||||
return this.curMp;
|
return this.curHp;
|
||||||
}
|
}
|
||||||
return this.curMp - changeValue;
|
if(this.curHp <changeValue){
|
||||||
|
int temp = curHp;
|
||||||
|
curHp =0;
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
this.curHp -= changeValue;
|
||||||
|
return changeValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getCurMp() {
|
public int getCurHp() {
|
||||||
return curMp;
|
return curHp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxMp() {
|
public int getMaxMp() {
|
||||||
return maxMp;
|
return maxMp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,15 +10,13 @@ import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||||
import com.ljsd.jieling.protocols.SceneFight;
|
import com.ljsd.jieling.protocols.SceneFight;
|
||||||
import com.ljsd.jieling.util.MessageUtil;
|
import com.ljsd.jieling.util.MessageUtil;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
|
|
||||||
public class Scene implements Runnable{
|
public class Scene implements Runnable{
|
||||||
private int bufferId;
|
private int bufferId;
|
||||||
private int mapId; //地图id
|
private int mapId; //地图id
|
||||||
|
private int state;
|
||||||
private Map<Integer,SceneActor> sceneActorMap = new HashMap<>(3);
|
private Map<Integer,SceneActor> sceneActorMap = new HashMap<>(3);
|
||||||
private BlockingUniqueQueue<Command> commandBlockingUniqueQueue = new BlockingUniqueQueue<>();
|
private BlockingUniqueQueue<Command> commandBlockingUniqueQueue = new BlockingUniqueQueue<>();
|
||||||
|
|
||||||
|
@ -42,12 +40,16 @@ public class Scene implements Runnable{
|
||||||
|
|
||||||
|
|
||||||
public void tick() throws InterruptedException {
|
public void tick() throws InterruptedException {
|
||||||
for(SceneActor sceneActor : sceneActorMap.values()){
|
Iterator<Map.Entry<Integer, SceneActor>> iterator = sceneActorMap.entrySet().iterator();
|
||||||
sceneActor.tick();
|
while (iterator.hasNext()){
|
||||||
|
iterator.next().getValue().tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
//消息广播
|
//消息广播
|
||||||
if(msgUpdate){
|
if(msgUpdate){
|
||||||
|
for(Integer removeId : builder.getRemoveActorIdList()){
|
||||||
|
sceneActorMap.remove(removeId);
|
||||||
|
}
|
||||||
for(SceneActor sceneActor : sceneActorMap.values()){
|
for(SceneActor sceneActor : sceneActorMap.values()){
|
||||||
if(sceneActor.getType() != ActorType.Npc){
|
if(sceneActor.getType() != ActorType.Npc){
|
||||||
if(willUpdateActors.contains(sceneActor.getId())){
|
if(willUpdateActors.contains(sceneActor.getId())){
|
||||||
|
@ -58,7 +60,7 @@ public class Scene implements Runnable{
|
||||||
for(SceneActor sceneActor : sceneActorMap.values()){
|
for(SceneActor sceneActor : sceneActorMap.values()){
|
||||||
if(sceneActor.getType() == ActorType.Player){
|
if(sceneActor.getType() == ActorType.Player){
|
||||||
ISession sessionByUid = OnlineUserManager.getSessionByUid(sceneActor.getId());
|
ISession sessionByUid = OnlineUserManager.getSessionByUid(sceneActor.getId());
|
||||||
if(sessionByUid!=null){
|
if(sessionByUid!=null && sceneActor.getGameState()==StateType.READYED_STATE){
|
||||||
MessageUtil.sendIndicationMessage(sessionByUid,1, MessageTypeProto.MessageType.SCENE_MSG_UPDATE_INDICATION_VALUE,builder.build(),true);
|
MessageUtil.sendIndicationMessage(sessionByUid,1, MessageTypeProto.MessageType.SCENE_MSG_UPDATE_INDICATION_VALUE,builder.build(),true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,7 +91,6 @@ public class Scene implements Runnable{
|
||||||
break;
|
break;
|
||||||
case SCENEACTORE_REMOVE:
|
case SCENEACTORE_REMOVE:
|
||||||
int deadId = (int) parm;
|
int deadId = (int) parm;
|
||||||
sceneActorMap.remove(deadId);
|
|
||||||
builder.addRemoveActorId(deadId);
|
builder.addRemoveActorId(deadId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +106,7 @@ public class Scene implements Runnable{
|
||||||
}
|
}
|
||||||
tick();
|
tick();
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,4 +124,13 @@ public class Scene implements Runnable{
|
||||||
public int getBufferId() {
|
public int getBufferId() {
|
||||||
return bufferId++;
|
return bufferId++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(int state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.ljsd.jieling.battle.actor;
|
||||||
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,9 +12,10 @@ import java.util.*;
|
||||||
public abstract class SceneActor{
|
public abstract class SceneActor{
|
||||||
private int id;
|
private int id;
|
||||||
private int pos;
|
private int pos;
|
||||||
private Map<Integer,EffectBuffer> bufferMap = new HashMap<>(2);
|
private Map<Integer,EffectBuffer> bufferMap = new ConcurrentHashMap<>(2);
|
||||||
private Scene scene;
|
private Scene scene;
|
||||||
private StateType stateType;
|
private StateType stateType;
|
||||||
|
private StateType gameState;
|
||||||
|
|
||||||
|
|
||||||
public Scene getScene() {
|
public Scene getScene() {
|
||||||
|
@ -26,10 +28,14 @@ public abstract class SceneActor{
|
||||||
|
|
||||||
public void addOrUpdateBuffer(EffectBuffer effectBuffer){
|
public void addOrUpdateBuffer(EffectBuffer effectBuffer){
|
||||||
bufferMap.put(effectBuffer.getId(),effectBuffer);
|
bufferMap.put(effectBuffer.getId(),effectBuffer);
|
||||||
|
System.out.println(effectBuffer);
|
||||||
if(effectBuffer.getType() == 3){
|
if(effectBuffer.getType() == 3){
|
||||||
stateType = StateType.FROZEN;
|
stateType = StateType.FROZEN;
|
||||||
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId());
|
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId());
|
||||||
}
|
}
|
||||||
|
if(effectBuffer.getType() == 2){
|
||||||
|
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId());
|
||||||
|
}
|
||||||
scene.processEventUpdate(EventType.BUFFER_UPDATE,effectBuffer);
|
scene.processEventUpdate(EventType.BUFFER_UPDATE,effectBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,17 +43,35 @@ public abstract class SceneActor{
|
||||||
return bufferMap;
|
return bufferMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkUpdateBuffer(long now){
|
public void checkUpdateBuffer(long now,boolean needRemoveDigger){
|
||||||
boolean isUpdate = false;
|
boolean isUpdate = false;
|
||||||
Iterator<Map.Entry<Integer, EffectBuffer>> iterator = bufferMap.entrySet().iterator();
|
Iterator<Map.Entry<Integer, EffectBuffer>> iterator = bufferMap.entrySet().iterator();
|
||||||
while (iterator.hasNext()){
|
while (iterator.hasNext()){
|
||||||
Map.Entry<Integer, EffectBuffer> next = iterator.next();
|
Map.Entry<Integer, EffectBuffer> next = iterator.next();
|
||||||
EffectBuffer value = next.getValue();
|
EffectBuffer value = next.getValue();
|
||||||
if(value.getType() == 2 ){ //挖矿
|
if(value.getType() == 2){ //挖矿
|
||||||
int times = (int)((now - value.getStartTime()) / 300);
|
int times = (int)((now - value.getStartTime()) / 1000);
|
||||||
Creature creature = (Creature) this;
|
Creature creature = (Creature) this;
|
||||||
creature.setMineral(times*100);
|
Creature mineral =(Creature) scene.getSceneActorMap().get(value.getCaster());
|
||||||
SceneActor sceneActor = scene.getSceneActorMap().get(value.getCaster());
|
int willDgger = times;
|
||||||
|
if(willDgger>0&&mineral.getLife().getCurHp()>0) {
|
||||||
|
int reallyDigger = mineral.getLife().reduceHp(willDgger);
|
||||||
|
creature.addMineral(reallyDigger);
|
||||||
|
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE, creature.getId());
|
||||||
|
if(mineral.getLife().getCurHp()>0){
|
||||||
|
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,mineral.getId());
|
||||||
|
}
|
||||||
|
value.setStartTime(value.getStartTime() + reallyDigger*1000);
|
||||||
|
}
|
||||||
|
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());
|
||||||
|
scene.processEventUpdate(EventType.BUFFER_REMOVE,value.getId());
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if( now>value.getEndTime() ){
|
if( now>value.getEndTime() ){
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
|
@ -73,6 +97,14 @@ public abstract class SceneActor{
|
||||||
}
|
}
|
||||||
addOrUpdateBuffer(new EffectBuffer(scene.getBufferId(),4,now,now+5000,this.getId(),0,0));
|
addOrUpdateBuffer(new EffectBuffer(scene.getBufferId(),4,now,now+5000,this.getId(),0,0));
|
||||||
}else{
|
}else{
|
||||||
|
Creature creature = (Creature) scene.getSceneActorMap().get(value.getCaster());
|
||||||
|
int mineral = creature.getMineral();
|
||||||
|
if(mineral>0){
|
||||||
|
creature.setMineral(0);
|
||||||
|
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,creature.getId());
|
||||||
|
((Creature)this).addMineral(mineral);
|
||||||
|
}
|
||||||
|
|
||||||
stateType = StateType.MOVEABLE;
|
stateType = StateType.MOVEABLE;
|
||||||
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId());
|
scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId());
|
||||||
}
|
}
|
||||||
|
@ -118,6 +150,14 @@ public abstract class SceneActor{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StateType getGameState() {
|
||||||
|
return gameState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGameState(StateType gameState) {
|
||||||
|
this.gameState = gameState;
|
||||||
|
}
|
||||||
|
|
||||||
public abstract ActorType getType();
|
public abstract ActorType getType();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class BloodyBattleMatchServer implements IMatch{
|
||||||
private static Map<Integer,Integer> roomFull = new HashMap<>();
|
private static Map<Integer,Integer> roomFull = new HashMap<>();
|
||||||
private static Map<Integer,Room> uidToRommMap = new HashMap<>();
|
private static Map<Integer,Room> uidToRommMap = new HashMap<>();
|
||||||
static {
|
static {
|
||||||
roomFull.put(1,2);
|
roomFull.put(1,6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -93,13 +93,20 @@ public class MatchServerice {
|
||||||
boolean isAllfinsih = true ;
|
boolean isAllfinsih = true ;
|
||||||
for(SceneActor sceneActor : scene.getSceneActorMap().values()){
|
for(SceneActor sceneActor : scene.getSceneActorMap().values()){
|
||||||
if(sceneActor.getId() == uid){
|
if(sceneActor.getId() == uid){
|
||||||
|
if(sceneActor.getStateType() != StateType.READYED_STATE){
|
||||||
sceneActor.setStateType(StateType.READYED_STATE);
|
sceneActor.setStateType(StateType.READYED_STATE);
|
||||||
}
|
}
|
||||||
|
sceneActor.setGameState(StateType.READYED_STATE);
|
||||||
|
}
|
||||||
if(sceneActor.getType()== ActorType.Player && sceneActor.getStateType()!=StateType.READYED_STATE){
|
if(sceneActor.getType()== ActorType.Player && sceneActor.getStateType()!=StateType.READYED_STATE){
|
||||||
isAllfinsih = false;
|
isAllfinsih = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(scene.getState() == 1){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//全部准备好了,准备开始游戏
|
//全部准备好了,准备开始游戏
|
||||||
if(isAllfinsih){
|
if(isAllfinsih){
|
||||||
startGame(scene);
|
startGame(scene);
|
||||||
|
@ -115,6 +122,7 @@ public class MatchServerice {
|
||||||
MessageUtil.sendRoomStartGameIndication(sceneActor.getId());
|
MessageUtil.sendRoomStartGameIndication(sceneActor.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
scene.setState(1);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.ljsd.jieling.battle.room;
|
||||||
import com.ljsd.jieling.battle.actor.*;
|
import com.ljsd.jieling.battle.actor.*;
|
||||||
import com.ljsd.jieling.protocols.CommonProto;
|
import com.ljsd.jieling.protocols.CommonProto;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class BeanToProto {
|
public class BeanToProto {
|
||||||
|
@ -22,7 +23,7 @@ public class BeanToProto {
|
||||||
|
|
||||||
public static CommonProto.Creature getCreature(Creature creature){
|
public static CommonProto.Creature getCreature(Creature creature){
|
||||||
return CommonProto.Creature.newBuilder()
|
return CommonProto.Creature.newBuilder()
|
||||||
.setCurHp(creature.getLife().getCurMp())
|
.setCurHp(creature.getLife().getCurHp())
|
||||||
.setMaxHp(creature.getLife().getMaxMp())
|
.setMaxHp(creature.getLife().getMaxMp())
|
||||||
.setSpeed(creature.getSpeed())
|
.setSpeed(creature.getSpeed())
|
||||||
.addAllPath(creature.getPath())
|
.addAllPath(creature.getPath())
|
||||||
|
@ -49,8 +50,10 @@ public class BeanToProto {
|
||||||
for(SceneActor sceneActor : sceneActorMap.values()){
|
for(SceneActor sceneActor : sceneActorMap.values()){
|
||||||
builder.addSceneActor(getSceneActor(sceneActor));
|
builder.addSceneActor(getSceneActor(sceneActor));
|
||||||
Map<Integer, EffectBuffer> bufferMap = sceneActor.getBufferMap();
|
Map<Integer, EffectBuffer> bufferMap = sceneActor.getBufferMap();
|
||||||
for(EffectBuffer effectBuffer : bufferMap.values()){
|
Iterator<Map.Entry<Integer, EffectBuffer>> iterator = bufferMap.entrySet().iterator();
|
||||||
builder.addActorEffectBufferInfo(getActorEffectBufferInfo(effectBuffer));
|
while (iterator.hasNext()){
|
||||||
|
Map.Entry<Integer, EffectBuffer> next = iterator.next();
|
||||||
|
builder.addActorEffectBufferInfo(getActorEffectBufferInfo(next.getValue()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.ljsd.jieling.logic.dao.UserManager;
|
||||||
import com.ljsd.jieling.logic.dao.root.User;
|
import com.ljsd.jieling.logic.dao.root.User;
|
||||||
import com.ljsd.jieling.network.session.ISession;
|
import com.ljsd.jieling.network.session.ISession;
|
||||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||||
|
import com.ljsd.jieling.protocols.SceneFight;
|
||||||
import com.ljsd.jieling.util.MathUtils;
|
import com.ljsd.jieling.util.MathUtils;
|
||||||
import com.ljsd.jieling.util.MessageUtil;
|
import com.ljsd.jieling.util.MessageUtil;
|
||||||
|
|
||||||
|
@ -20,7 +21,7 @@ public class SceneManager {
|
||||||
public static void createScene(Room room){
|
public static void createScene(Room room){
|
||||||
Scene scene = new Scene();
|
Scene scene = new Scene();
|
||||||
scene.setMapId(101);
|
scene.setMapId(101);
|
||||||
int i = 13;
|
int i = 6;
|
||||||
for(Integer uid : room.fightPlayer){
|
for(Integer uid : room.fightPlayer){
|
||||||
User user = null;
|
User user = null;
|
||||||
try {
|
try {
|
||||||
|
@ -42,13 +43,15 @@ public class SceneManager {
|
||||||
|
|
||||||
SceneMineral sceneMineral = new SceneMineral();
|
SceneMineral sceneMineral = new SceneMineral();
|
||||||
sceneMineral.setId(999);
|
sceneMineral.setId(999);
|
||||||
sceneMineral.setLife(new Life(100000,100000));
|
sceneMineral.setPos(256*3+10);
|
||||||
|
sceneMineral.setLife(new Life(300000,300000));
|
||||||
|
|
||||||
scene.addScenActor(sceneMineral);
|
scene.addScenActor(sceneMineral);
|
||||||
|
|
||||||
SceneMineral sceneMinera2 = new SceneMineral();
|
SceneMineral sceneMinera2 = new SceneMineral();
|
||||||
sceneMinera2.setId(999);
|
sceneMinera2.setId(1999);
|
||||||
sceneMinera2.setLife(new Life(100,100));
|
sceneMinera2.setPos(256*5+2);
|
||||||
|
sceneMinera2.setLife(new Life(5,5));
|
||||||
scene.addScenActor(sceneMinera2);
|
scene.addScenActor(sceneMinera2);
|
||||||
|
|
||||||
/* SceneMonster sceneMonster = new SceneMonster();
|
/* SceneMonster sceneMonster = new SceneMonster();
|
||||||
|
@ -150,19 +153,19 @@ public class SceneManager {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Scene scene = getSceneMap(user.getRoomInfo().getRoomId());
|
Scene scene = getSceneMap(user.getRoomInfo().getRoomId());
|
||||||
|
SceneFight.SceneCommandResponse.Builder builder = SceneFight.SceneCommandResponse.newBuilder().setType(type).setResult(1);
|
||||||
if(type == 1){
|
if(type == 1){
|
||||||
SceneActor sceneActor = scene.getSceneActorMap().get(session.getUid());
|
SceneActor sceneActor = scene.getSceneActorMap().get(session.getUid());
|
||||||
boolean playerACommandAllow = sceneActor.checkCommand(1, parm);
|
boolean playerACommandAllow = sceneActor.checkCommand(1, parm);
|
||||||
if(!playerACommandAllow){
|
if(!playerACommandAllow){
|
||||||
MessageUtil.sendErrorResponse(session,0,msgId,"wrong path");
|
builder.setResult(0);
|
||||||
return;
|
}else{
|
||||||
|
|
||||||
}
|
|
||||||
Command commandA = new Command(1,sceneActor,parm);
|
Command commandA = new Command(1,sceneActor,parm);
|
||||||
scene.addCommand(commandA);
|
scene.addCommand(commandA);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
MessageUtil.sendMessage(session,1,msgId,null,true);
|
MessageUtil.sendMessage(session,1,msgId,builder.build(),true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.ljsd.jieling.logic.dao;
|
||||||
|
|
||||||
|
public class GoodsInfo {
|
||||||
|
private int goodsId;
|
||||||
|
private int type;
|
||||||
|
private int startTime;
|
||||||
|
private int endTime;
|
||||||
|
}
|
|
@ -218,8 +218,14 @@ public class StoreLogic {
|
||||||
MessageUtil.sendErrorResponse(iSession,0,msgId,err);
|
MessageUtil.sendErrorResponse(iSession,0,msgId,err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
int[][] goods = sStoreConfig.getGoods();
|
||||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sStoreConfig.getGoods(), BIReason.STORE_BUY_ITEM);
|
int length = goods.length;
|
||||||
|
int[][] dropItems = new int[length][];
|
||||||
|
for(int i=0;i<length;i++){
|
||||||
|
dropItems[i]= goods[i];
|
||||||
|
dropItems[i][1]= goods[i][1]*itemNum;
|
||||||
|
}
|
||||||
|
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropItems, BIReason.STORE_BUY_ITEM);
|
||||||
if(SStoreTypeConfig.getsStoreTypeConfigMap().get(storeId).getStoreType() != StoreType.GIFT_STORE.getType()){
|
if(SStoreTypeConfig.getsStoreTypeConfigMap().get(storeId).getStoreType() != StoreType.GIFT_STORE.getType()){
|
||||||
user.getUserMissionManager().onGameEvent(user, GameEvent.BUY_MATERIAL,sStoreConfig.getGoods()[0][0],itemNum);
|
user.getUserMissionManager().onGameEvent(user, GameEvent.BUY_MATERIAL,sStoreConfig.getGoods()[0][0],itemNum);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,9 @@ import com.google.protobuf.GeneratedMessage;
|
||||||
import com.google.protobuf.InvalidProtocolBufferException;
|
import com.google.protobuf.InvalidProtocolBufferException;
|
||||||
import com.ljsd.GameApplication;
|
import com.ljsd.GameApplication;
|
||||||
import com.ljsd.common.mogodb.LjsdMongoTemplate;
|
import com.ljsd.common.mogodb.LjsdMongoTemplate;
|
||||||
|
import com.ljsd.jieling.battle.actor.Scene;
|
||||||
|
import com.ljsd.jieling.battle.actor.StateType;
|
||||||
|
import com.ljsd.jieling.battle.room.SceneManager;
|
||||||
import com.ljsd.jieling.config.SGlobalSystemConfig;
|
import com.ljsd.jieling.config.SGlobalSystemConfig;
|
||||||
import com.ljsd.jieling.core.FunctionIdEnum;
|
import com.ljsd.jieling.core.FunctionIdEnum;
|
||||||
import com.ljsd.jieling.core.HandlerLogicThread;
|
import com.ljsd.jieling.core.HandlerLogicThread;
|
||||||
|
@ -310,11 +313,15 @@ public class ProtocolsManager implements ProtocolsAbstract {
|
||||||
// } catch (FileNotFoundException e) {
|
// } catch (FileNotFoundException e) {
|
||||||
// e.printStackTrace();
|
// e.printStackTrace();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
User user = UserManager.getUserInMem(session.getUid());
|
User user = UserManager.getUserInMem(session.getUid());
|
||||||
if(user == null){
|
if(user == null){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(user.getRoomInfo().getRoomId() != -1){
|
||||||
|
Scene scene = SceneManager.getSceneMap(user.getRoomInfo().getRoomId());
|
||||||
|
scene.getSceneActorMap().get(user.getId()).setGameState(StateType.UNREADY_STATE);
|
||||||
|
}
|
||||||
|
|
||||||
KtEventUtils.onKtEvent(user, ParamEventBean.UserLoginOutEvent,1);
|
KtEventUtils.onKtEvent(user, ParamEventBean.UserLoginOutEvent,1);
|
||||||
KtEventUtils.onKtEvent(user, ParamEventBean.UserLogin,1);
|
KtEventUtils.onKtEvent(user, ParamEventBean.UserLogin,1);
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,8 @@ public class CellUtil {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
List<Integer> path = new ArrayList<>();
|
List<Integer> path = new ArrayList<>();
|
||||||
path.add(1547);
|
path.add(2051);
|
||||||
path.add(1292);
|
path.add(2307);
|
||||||
for(Integer pos : path){
|
for(Integer pos : path){
|
||||||
System.out.println(pos +"----------------");
|
System.out.println(pos +"----------------");
|
||||||
System.out.print(pos2XY(pos)[0] + " ");
|
System.out.print(pos2XY(pos)[0] + " ");
|
||||||
|
|
|
@ -57,6 +57,8 @@ public class ItemUtil {
|
||||||
return dropBuilder;
|
return dropBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//指定道具掉落(如:邮件,初始化物品)
|
//指定道具掉落(如:邮件,初始化物品)
|
||||||
public static CommonProto.Drop.Builder dropMap(User user, Map<Integer,Integer> itemArr,int reason) throws Exception {
|
public static CommonProto.Drop.Builder dropMap(User user, Map<Integer,Integer> itemArr,int reason) throws Exception {
|
||||||
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
|
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
|
||||||
|
|
Loading…
Reference in New Issue