fix goods

back_recharge
wangyuan 2019-07-22 10:16:47 +08:00
parent 5dde031242
commit a142e3d3d8
14 changed files with 217 additions and 57 deletions

View File

@ -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);
sceneActor.whenTriggerEvent(othereffectBuffer,timestamp); result = true;
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);
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) {

View File

@ -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 +
'}';
}
} }

View File

@ -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;
} }
} }

View File

@ -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;
}
} }

View File

@ -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();

View File

@ -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);
} }

View File

@ -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){
sceneActor.setStateType(StateType.READYED_STATE); if(sceneActor.getStateType() != 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);
} }
} }

View File

@ -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();

View File

@ -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);
scene.addCommand(commandA);
} }
Command commandA = new Command(1,sceneActor,parm);
scene.addCommand(commandA);
} }
MessageUtil.sendMessage(session,1,msgId,null,true); MessageUtil.sendMessage(session,1,msgId,builder.build(),true);
} }

View File

@ -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;
}

View File

@ -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);
} }

View File

@ -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);

View File

@ -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] + " ");

View File

@ -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();