欢迎一起学习交流
QQ:51267195
电话:18816791911 微信同号
package com.linyun.xgame.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.apache.log4j.Logger;
import com.linyun.base.constant.ErrorCodeConstant;
import com.linyun.base.constant.GameConstant;
import com.linyun.base.constant.LogConstant;
import com.linyun.base.domain.CardDown;
import com.linyun.base.domain.NormalGameRecord;
import com.linyun.base.domain.Player;
import com.linyun.base.domain.SystemConfigPara;
import com.linyun.base.domain.VipGameRecord;
import com.linyun.base.domain.VipRoomRecord;
import com.linyun.base.msg.friend.BeInvitedEnterVipRoomMsg;
import com.linyun.base.msg.friend.InviteFriendEnterVipRoomMsg;
import com.linyun.base.networkbase.NetMsgBase;
import com.linyun.xgame.common.DateService;
import com.linyun.xgame.common.SpringService;
import com.linyun.xgame.common.SystemConfig;
import com.linyun.xgame.common.UUIDGenerator;
import com.linyun.xgame.constant.GameConfigConstant;
import com.linyun.xgame.domain.GameRoom;
import com.linyun.xgame.domain.GameTable;
import com.linyun.xgame.domain.ItemBase;
import com.linyun.xgame.domain.MahjongCheckResult;
import com.linyun.xgame.machine.IMachineService;
import com.linyun.xgame.machine.impl.MachineService;
import com.linyun.xgame.msg.EnterVipRoomMsg;
import com.linyun.xgame.msg.GameStartMsg;
import com.linyun.xgame.msg.PlayerGameOpertaionAckMsg;
import com.linyun.xgame.msg.PlayerGameOverMsgAck;
import com.linyun.xgame.msg.PlayerOperationNotifyMsg;
import com.linyun.xgame.msg.PlayerTableOperationMsg;
import com.linyun.xgame.msg.RequestStartGameMsgAck;
import com.linyun.xgame.msg.SearchVipRoomMsgAck;
import com.linyun.xgame.msg.TalkingInGameMsg;
import com.linyun.xgame.msg.VipRoomCloseMsg;
import com.linyun.xgame.service.ISystemConfigService;
import com.linyun.base.constant.GameConstant;
import com.linyun.base.constant.LogConstant;
import com.linyun.base.domain.CardDown;
import com.linyun.base.domain.NormalGameRecord;
import com.linyun.base.domain.Player;
import com.linyun.base.domain.SystemConfigPara;
import com.linyun.base.domain.VipGameRecord;
import com.linyun.base.domain.VipRoomRecord;
import com.linyun.base.msg.friend.BeInvitedEnterVipRoomMsg;
import com.linyun.base.msg.friend.InviteFriendEnterVipRoomMsg;
import com.linyun.base.networkbase.NetMsgBase;
import com.linyun.xgame.common.DateService;
import com.linyun.xgame.common.SpringService;
import com.linyun.xgame.common.SystemConfig;
import com.linyun.xgame.common.UUIDGenerator;
import com.linyun.xgame.constant.GameConfigConstant;
import com.linyun.xgame.domain.GameRoom;
import com.linyun.xgame.domain.GameTable;
import com.linyun.xgame.domain.ItemBase;
import com.linyun.xgame.domain.MahjongCheckResult;
import com.linyun.xgame.machine.IMachineService;
import com.linyun.xgame.machine.impl.MachineService;
import com.linyun.xgame.msg.EnterVipRoomMsg;
import com.linyun.xgame.msg.GameStartMsg;
import com.linyun.xgame.msg.PlayerGameOpertaionAckMsg;
import com.linyun.xgame.msg.PlayerGameOverMsgAck;
import com.linyun.xgame.msg.PlayerOperationNotifyMsg;
import com.linyun.xgame.msg.PlayerTableOperationMsg;
import com.linyun.xgame.msg.RequestStartGameMsgAck;
import com.linyun.xgame.msg.SearchVipRoomMsgAck;
import com.linyun.xgame.msg.TalkingInGameMsg;
import com.linyun.xgame.msg.VipRoomCloseMsg;
import com.linyun.xgame.service.ISystemConfigService;
public class GameLogicProcess {
private static Logger logger = Logger.getLogger(GameLogicProcess.class);
private static Logger logger = Logger.getLogger(GameLogicProcess.class);
private List<GameRoom> gameRoomList = new ArrayList<GameRoom>();
private Map<Integer, GameRoom> gameRoomMap = new HashMap<Integer, GameRoom>();
private Map<Integer, GameRoom> gameRoomMap = new HashMap<Integer, GameRoom>();
private DBServerPlayerService playerService = null;
private ISystemConfigService cfgService = null;
private ISystemConfigService cfgService = null;
// 麻将逻辑处理
private MahjongProcess mjProc = new MahjongProcess();
private IMachineService machineService = new MachineService();
private MahjongProcess mjProc = new MahjongProcess();
private IMachineService machineService = new MachineService();
//
private boolean showCardLog = true;
private boolean showCardLog = true;
//
public GameLogicProcess(DBServerPlayerService ps) {
playerService = ps;
SystemConfig.gameLogic = this;
}
public GameLogicProcess(DBServerPlayerService ps) {
playerService = ps;
SystemConfig.gameLogic = this;
}
//
public void init() {
public void init() {
}
// 房间配置规则在t_global表中,字段PARA_ID 2001到2050,VALUE_INT是底注,PRO_2是最小携带,PRO_3是最大携带
// PRO_1房间类型
//
public void load_room_settings() {
if (cfgService == null)
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
//
for (int i = GameConfigConstant.CONF_ROOM_OF_PRIMARY; i < 2050; i++) {
SystemConfigPara cfg = cfgService.getPara(i);
if (cfg == null)
continue;
//
GameRoom gr = new GameRoom();
gr.price = cfg.getValueInt();// 底注
gr.cfgId = cfg.getParaID();
gr.maxGold = cfg.getPro_3();
gr.minGold = cfg.getPro_2();
gr.roomType = cfg.getPro_1();
gr.roomID = i;
gr.serviceFee = cfg.getPro_4();// 台费
// PRO_1房间类型
//
public void load_room_settings() {
if (cfgService == null)
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
//
for (int i = GameConfigConstant.CONF_ROOM_OF_PRIMARY; i < 2050; i++) {
SystemConfigPara cfg = cfgService.getPara(i);
if (cfg == null)
continue;
//
GameRoom gr = new GameRoom();
gr.price = cfg.getValueInt();// 底注
gr.cfgId = cfg.getParaID();
gr.maxGold = cfg.getPro_3();
gr.minGold = cfg.getPro_2();
gr.roomType = cfg.getPro_1();
gr.roomID = i;
gr.serviceFee = cfg.getPro_4();// 台费
//
if (gr.roomType == GameConstant.ROOM_TYPE_VIP) {
gr.fixedGold = cfg.getPro_5(); // VIP房间固定带入金币数
}
if (gr.roomType == GameConstant.ROOM_TYPE_VIP) {
gr.fixedGold = cfg.getPro_5(); // VIP房间固定带入金币数
}
//
gameRoomList.add(gr);
gameRoomMap.put(i, gr);
gameRoomList.add(gr);
gameRoomMap.put(i, gr);
}
}
// 重连回来没有色的提示
// 不能碰自己的清楚色
// 不能碰自己的清楚色
public void updateRoom(SystemConfigPara cfg) {
if (cfg.getParaID() >= GameConfigConstant.CONF_ROOM_OF_PRIMARY
&& cfg.getParaID() < 2050) {
boolean found = false;
if (cfg.getParaID() >= GameConfigConstant.CONF_ROOM_OF_PRIMARY
&& cfg.getParaID() < 2050) {
boolean found = false;
for (int i = 0; i < gameRoomList.size(); i++) {
GameRoom gr = gameRoomList.get(i);
//
if (gr.cfgId == cfg.getParaID()) {
//
found = true;
//
gr.price = cfg.getValueInt();// 底注
gr.maxGold = cfg.getPro_3();
gr.minGold = cfg.getPro_2();
gr.roomType = cfg.getPro_1();
gr.serviceFee = cfg.getPro_4();// 台费
GameRoom gr = gameRoomList.get(i);
//
if (gr.cfgId == cfg.getParaID()) {
//
found = true;
//
gr.price = cfg.getValueInt();// 底注
gr.maxGold = cfg.getPro_3();
gr.minGold = cfg.getPro_2();
gr.roomType = cfg.getPro_1();
gr.serviceFee = cfg.getPro_4();// 台费
if (gr.roomType == GameConstant.ROOM_TYPE_VIP) {
gr.fixedGold = cfg.getPro_5(); // VIP房间固定带入金币数
}
//
if (gr.price == 0)// 0的意思是把这个房间关闭
{
gameRoomList.remove(i);
}
//
break;
}
}
//
//
if (found == false) {
GameRoom gr = new GameRoom();
gr.price = cfg.getValueInt();// 底注
gr.maxGold = cfg.getPro_3();
gr.minGold = cfg.getPro_2();
gr.roomType = cfg.getPro_1();
gr.serviceFee = cfg.getPro_4();// 台费
gr.fixedGold = cfg.getPro_5(); // VIP房间固定带入金币数
}
//
if (gr.price == 0)// 0的意思是把这个房间关闭
{
gameRoomList.remove(i);
}
//
break;
}
}
//
//
if (found == false) {
GameRoom gr = new GameRoom();
gr.price = cfg.getValueInt();// 底注
gr.maxGold = cfg.getPro_3();
gr.minGold = cfg.getPro_2();
gr.roomType = cfg.getPro_1();
gr.serviceFee = cfg.getPro_4();// 台费
if (gr.roomType == GameConstant.ROOM_TYPE_VIP) {
gr.fixedGold = cfg.getPro_5(); // VIP房间固定带入金币数
}
//
if (gr.price > 0)// 0的意思是把这个房间关闭
{
gameRoomList.add(gr);
}
}
}
}
gr.fixedGold = cfg.getPro_5(); // VIP房间固定带入金币数
}
//
if (gr.price > 0)// 0的意思是把这个房间关闭
{
gameRoomList.add(gr);
}
}
}
}
//
public GameTable popFreeTable() {
GameTable gt = new GameTable();
//
return gt;
}
public GameTable popFreeTable() {
GameTable gt = new GameTable();
//
return gt;
}
//
//
public GameRoom getRoom(int roomID) {
return gameRoomMap.get(roomID);
public GameRoom getRoom(int roomID) {
return gameRoomMap.get(roomID);
}
public int getRoomPlayerNum(int roomID) {
GameRoom gr = gameRoomMap.get(roomID);
if (gr != null)
return gr.getPlayerNum();
GameRoom gr = gameRoomMap.get(roomID);
if (gr != null)
return gr.getPlayerNum();
return 0;
}
}
//
public int getRoomPlayerNumByType(int type) {
return 0;
}
return 0;
}
public int getPlayerVipTableID(Player pl) {
int roomID = pl.getRoomID();
int roomID = pl.getRoomID();
GameRoom gr = getRoom(roomID);
if (gr == null)
return 0;
if (gr == null)
return 0;
GameTable gt = gr.getTable(pl.getTableID(), false);
if (gt == null) {
return 0;
}
if (gt == null) {
return 0;
}
if (gt.isVipTable()) {
return gt.getVipTableID();
}
return gt.getVipTableID();
}
return 0;
}
}
/** 客户端通知服务器,游戏结束,玩家继续游戏* */
public void game_continue(Player pl) {
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
public void game_continue(Player pl) {
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
int roomID = pl.getRoomID();
GameRoom gr = getRoom(roomID);
if (gr == null)
return;
if (gr == null)
return;
if (GameConstant.ROOM_TYPE_VIP != gr.roomType) {
// 校验金币
if (pl.getGold() < gr.minGold) {
// 返回给玩家,
RequestStartGameMsgAck Error_ack = new RequestStartGameMsgAck();
Error_ack.gold = pl.getGold();
Error_ack.result = ErrorCodeConstant.GOLD_LOW_THAN_MIN_LIMIT;
// 进入桌子失败
Error_ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(),
Error_ack);
return;
} else if (pl.getGold() > gr.maxGold) {
// 返回给玩家,
RequestStartGameMsgAck Error_ack = new RequestStartGameMsgAck();
Error_ack.gold = pl.getGold();
Error_ack.result = ErrorCodeConstant.GOLD_HIGH_THAN_MAX_LIMIT;
// 进入桌子失败
Error_ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(),
Error_ack);
return;
}
}
//
GameTable gt = gr.getTable(pl.getTableID(), false);
if (gt == null) {
// 重新进新桌吧,老桌子没了
// System.out.println("继续游戏:"+pl.getPlayerName()+"重新进新桌吧,老桌子没了");
this.enter_room(pl, roomID);
return;
}
// 校验金币
if (pl.getGold() < gr.minGold) {
// 返回给玩家,
RequestStartGameMsgAck Error_ack = new RequestStartGameMsgAck();
Error_ack.gold = pl.getGold();
Error_ack.result = ErrorCodeConstant.GOLD_LOW_THAN_MIN_LIMIT;
// 进入桌子失败
Error_ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(),
Error_ack);
return;
} else if (pl.getGold() > gr.maxGold) {
// 返回给玩家,
RequestStartGameMsgAck Error_ack = new RequestStartGameMsgAck();
Error_ack.gold = pl.getGold();
Error_ack.result = ErrorCodeConstant.GOLD_HIGH_THAN_MAX_LIMIT;
// 进入桌子失败
Error_ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(),
Error_ack);
return;
}
}
//
GameTable gt = gr.getTable(pl.getTableID(), false);
if (gt == null) {
// 重新进新桌吧,老桌子没了
// System.out.println("继续游戏:"+pl.getPlayerName()+"重新进新桌吧,老桌子没了");
this.enter_room(pl, roomID);
return;
}
ack.createPlayerID = gt.getCreatorPlayerID();
// 玩家的状态必须是在等待继续状态
if (pl.getGameState() != GameConstant.PALYER_GAME_STATE_IN_TABLE_GAME_OVER_WAITING_TO_CONTINUE)
return;
if (pl.getGameState() != GameConstant.PALYER_GAME_STATE_IN_TABLE_GAME_OVER_WAITING_TO_CONTINUE)
return;
// 如果VIP房间的圈数用完了,就不能继续了
if ((GameConstant.ROOM_TYPE_VIP == gr.roomType)
&& (gt.isVipTableTimeOver())) {
ack.result = ErrorCodeConstant.VIP_TABLE_IS_GAME_OVER; // VIP桌子已经结束
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return;
}
if ((GameConstant.ROOM_TYPE_VIP == gr.roomType)
&& (gt.isVipTableTimeOver())) {
ack.result = ErrorCodeConstant.VIP_TABLE_IS_GAME_OVER; // VIP桌子已经结束
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return;
}
//
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
//
ack.result = ErrorCodeConstant.CMD_EXE_OK;
//
ack.init_players(gt.getPlayers(), gt.isVipTable());
//
ack.gold = pl.getGold();
//
if (gt.isVipTable()) {
ack.totalHand = gt.getHandsTotal();
ack.vipTableID = gt.getVipTableID();
ack.createPlayerID = gt.getCreatorPlayerID();
ack.currentHand = gt.getHandNum();
} else
ack.vipTableID = 0;
//
ack.roomID = roomID;
// ack.tablePos=pl.getTablePos();
ack.tablePos = pl.getTablePos() | (gt.getMaxPlayer() << 16);
//
ack.newPlayWay = gt.getVip_rule();
//
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
//
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
//
ack.result = ErrorCodeConstant.CMD_EXE_OK;
//
ack.init_players(gt.getPlayers(), gt.isVipTable());
//
ack.gold = pl.getGold();
//
if (gt.isVipTable()) {
ack.totalHand = gt.getHandsTotal();
ack.vipTableID = gt.getVipTableID();
ack.createPlayerID = gt.getCreatorPlayerID();
ack.currentHand = gt.getHandNum();
} else
ack.vipTableID = 0;
//
ack.roomID = roomID;
// ack.tablePos=pl.getTablePos();
ack.tablePos = pl.getTablePos() | (gt.getMaxPlayer() << 16);
//
ack.newPlayWay = gt.getVip_rule();
//
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
//
// 给桌子上的其他玩家发个进入新玩家的消息
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_TABLE_ADD_NEW_PLAYER;
axk.playerName = pl.getPlayerName();
axk.targetPlayerName = pl.getHeadImageUrl();
//
if (gt.isVipTable())
axk.gold = pl.getVipTableGold();
else
axk.gold = pl.getGold();
//
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.tablePos = pl.getTablePos();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();
axk.ip = pl.getClientIP();
axk.sessionID = pl.getPlayerLobbySessionID();
axk.opValue = gt.getMaxPlayer();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
try_Closevip(gt,pl);
}
private void try_Closevip(GameTable gt,Player pl){
if(gt.isVipTable()){
if(gt.getClearCloseVipRoomMapSize() > 0 && gt.getClearCloseVipRoomMapSize() < gt.getMaxPlayer()){
for(Player gp: gt.getPlayers()){
if(!gt.containVipRoomCloseRequester(gp.getPlayerID())){
PlayerGameOpertaionAckMsg msgx = new PlayerGameOpertaionAckMsg();
msgx.playerName = pl.getPlayerName();
msgx.opertaionID = GameConstant.MAHJONG_OPERTAION_WAITING_OR_CLOSE_VIP;
msgx.playerIndex = pl.getPlayerIndex();
msgx.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(gp.getSession(), msgx);
}
}
}
}
}
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_TABLE_ADD_NEW_PLAYER;
axk.playerName = pl.getPlayerName();
axk.targetPlayerName = pl.getHeadImageUrl();
//
if (gt.isVipTable())
axk.gold = pl.getVipTableGold();
else
axk.gold = pl.getGold();
//
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.tablePos = pl.getTablePos();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();
axk.ip = pl.getClientIP();
axk.sessionID = pl.getPlayerLobbySessionID();
axk.opValue = gt.getMaxPlayer();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
try_Closevip(gt,pl);
}
private void try_Closevip(GameTable gt,Player pl){
if(gt.isVipTable()){
if(gt.getClearCloseVipRoomMapSize() > 0 && gt.getClearCloseVipRoomMapSize() < gt.getMaxPlayer()){
for(Player gp: gt.getPlayers()){
if(!gt.containVipRoomCloseRequester(gp.getPlayerID())){
PlayerGameOpertaionAckMsg msgx = new PlayerGameOpertaionAckMsg();
msgx.playerName = pl.getPlayerName();
msgx.opertaionID = GameConstant.MAHJONG_OPERTAION_WAITING_OR_CLOSE_VIP;
msgx.playerIndex = pl.getPlayerIndex();
msgx.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(gp.getSession(), msgx);
}
}
}
}
}
//
private void player_recover(GameTable gt, Player pl) {
// 如果没有手牌,游戏还没开始,不能发GameStartMsg消息,否则游戏界面没有手牌
if (0 == pl.getCardNumInHand()) {
return;
}
private void player_recover(GameTable gt, Player pl) {
// 如果没有手牌,游戏还没开始,不能发GameStartMsg消息,否则游戏界面没有手牌
if (0 == pl.getCardNumInHand()) {
return;
}
// 把牌发给玩家
GameStartMsg msg = new GameStartMsg();
msg.myTablePos = pl.getTablePos();
msg.myCards = pl.getCardsInHand();
msg.newPlayWay = gt.getVip_rule();
//
Player pl0 = gt.getPlayerAtIndex(0);
GameStartMsg msg = new GameStartMsg();
msg.myTablePos = pl.getTablePos();
msg.myCards = pl.getCardsInHand();
msg.newPlayWay = gt.getVip_rule();
//
Player pl0 = gt.getPlayerAtIndex(0);
if (pl0 != null) {
msg.player0Cards = pl0.getCardsBefore();
msg.player0CardsDown = pl0.getCardsDown();
msg.player0WinLoseEqual = pl0.getTotalBattles();
msg.player0Win = pl0.getDiamond();
msg.player0Buhua = pl0.getHuaValue();
msg.baibannum0 = pl0.getBaibanhua();
}
msg.player0Cards = pl0.getCardsBefore();
msg.player0CardsDown = pl0.getCardsDown();
msg.player0WinLoseEqual = pl0.getTotalBattles();
msg.player0Win = pl0.getDiamond();
msg.player0Buhua = pl0.getHuaValue();
msg.baibannum0 = pl0.getBaibanhua();
}
Player pl1 = gt.getPlayerAtIndex(1);
if (pl1 != null) {
msg.player1Cards = pl1.getCardsBefore();
msg.player1CardsDown = pl1.getCardsDown();
msg.player1WinLoseEqual = pl1.getTotalBattles();
msg.player1Win = pl1.getDiamond();
msg.player1Buhua = pl1.getHuaValue();
msg.baibannum1 = pl1.getBaibanhua();
}
//
msg.dealerPos = gt.getDealerPos();
msg.quanNum = gt.getHandNum();// gt.getQuanNum();
if (pl1 != null) {
msg.player1Cards = pl1.getCardsBefore();
msg.player1CardsDown = pl1.getCardsDown();
msg.player1WinLoseEqual = pl1.getTotalBattles();
msg.player1Win = pl1.getDiamond();
msg.player1Buhua = pl1.getHuaValue();
msg.baibannum1 = pl1.getBaibanhua();
}
//
msg.dealerPos = gt.getDealerPos();
msg.quanNum = gt.getHandNum();// gt.getQuanNum();
// 是否听牌
List<Player> players = gt.getPlayers();
for (int i = 0; i < players.size(); i++) {
Player pxx = gt.getPlayerAtIndex(i);
List<Player> players = gt.getPlayers();
for (int i = 0; i < players.size(); i++) {
Player pxx = gt.getPlayerAtIndex(i);
if (pxx == null)
continue;
continue;
// 胡牌标志
if (pxx.isHuuuuued()) {
int huCd = pxx.getHuCard() & 0xff;
msg.tingPlayers |= (huCd << (i * 8));
}
if (pxx.isHuuuuued()) {
int huCd = pxx.getHuCard() & 0xff;
msg.tingPlayers |= (huCd << (i * 8));
}
//
// 是否离线
if ((pxx.getOnTable() == false) || (pxx.isOnline() == false)) {
msg.OffLinePlayers |= (1 << (i * 8));
}
// 是否离线
if ((pxx.getOnTable() == false) || (pxx.isOnline() == false)) {
msg.OffLinePlayers |= (1 << (i * 8));
}
// 设置金币
if (pxx != null) {
int ipt = pxx.getTablePos();
if (gt.isVipTable()) {
if (ipt == 0)
msg.player0Gold = pxx.getVipTableGold();
else if (ipt == 1)
msg.player1Gold = pxx.getVipTableGold();
else if (ipt == 2)
msg.player2Gold = pxx.getVipTableGold();
else if (ipt == 3)
msg.player3Gold = pxx.getVipTableGold();
} else {
if (ipt == 0)
msg.player0Gold = pxx.getGold();
else if (ipt == 1)
msg.player1Gold = pxx.getGold();
else if (ipt == 2)
msg.player2Gold = pxx.getGold();
else if (ipt == 3)
msg.player3Gold = pxx.getGold();
}
}
if (pxx != null) {
int ipt = pxx.getTablePos();
if (gt.isVipTable()) {
if (ipt == 0)
msg.player0Gold = pxx.getVipTableGold();
else if (ipt == 1)
msg.player1Gold = pxx.getVipTableGold();
else if (ipt == 2)
msg.player2Gold = pxx.getVipTableGold();
else if (ipt == 3)
msg.player3Gold = pxx.getVipTableGold();
} else {
if (ipt == 0)
msg.player0Gold = pxx.getGold();
else if (ipt == 1)
msg.player1Gold = pxx.getGold();
else if (ipt == 2)
msg.player2Gold = pxx.getGold();
else if (ipt == 3)
msg.player3Gold = pxx.getGold();
}
}
}
//
//
Player pl2 = gt.getPlayerAtIndex(2);
if (pl2 != null) {
msg.player2Cards = pl2.getCardsBefore();
msg.player2CardsDown = pl2.getCardsDown();
msg.player2WinLoseEqual = pl2.getTotalBattles();
msg.player2Win = pl2.getDiamond();
msg.player2Buhua = pl2.getHuaValue();
msg.baibannum2 = pl2.getBaibanhua();
}
if (pl2 != null) {
msg.player2Cards = pl2.getCardsBefore();
msg.player2CardsDown = pl2.getCardsDown();
msg.player2WinLoseEqual = pl2.getTotalBattles();
msg.player2Win = pl2.getDiamond();
msg.player2Buhua = pl2.getHuaValue();
msg.baibannum2 = pl2.getBaibanhua();
}
Player pl3 = gt.getPlayerAtIndex(3);
if (pl3 != null) {
msg.player3Cards = pl3.getCardsBefore();
msg.player3CardsDown = pl3.getCardsDown();
msg.player3WinLoseEqual = pl3.getTotalBattles();
msg.player3Win = pl3.getDiamond();
msg.player3Buhua = pl3.getHuaValue();
msg.baibannum3 = pl3.getBaibanhua();
}
//
msg.chuCardPlayerIndex = gt.getCardOpPlayerIndex();
msg.chuCard = gt.getCurrentCard() & 0xff;
msg.serviceGold = gt.getHandsTotal();
msg.baoCard = gt.getBaoCard();
msg.baoCard |= (gt.getBaoCard2() << 8);
//
msg.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), msg);
}
if (pl3 != null) {
msg.player3Cards = pl3.getCardsBefore();
msg.player3CardsDown = pl3.getCardsDown();
msg.player3WinLoseEqual = pl3.getTotalBattles();
msg.player3Win = pl3.getDiamond();
msg.player3Buhua = pl3.getHuaValue();
msg.baibannum3 = pl3.getBaibanhua();
}
//
msg.chuCardPlayerIndex = gt.getCardOpPlayerIndex();
msg.chuCard = gt.getCurrentCard() & 0xff;
msg.serviceGold = gt.getHandsTotal();
msg.baoCard = gt.getBaoCard();
msg.baoCard |= (gt.getBaoCard2() << 8);
//
msg.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), msg);
}
//
public void inviteFriend(InviteFriendEnterVipRoomMsg msg, Player pl) {
Player friend = playerService.getPlayerByPlayerID(msg.playerID);
if (friend == null)
return;
//
GameRoom gr = getRoom(msg.roomID);
if (gr == null)
return;
//
GameTable gt = gr.getVipTableByVipTableID(msg.vipTableID);
if (gt == null)
return;
//
// 只有房主可以邀请
if (gt.getCreatorPlayerID().equals(pl.getPlayerID())) {
//
BeInvitedEnterVipRoomMsg msx = new BeInvitedEnterVipRoomMsg();
msx.tableID = gt.getTableID();
msx.playerID = pl.getPlayerID();
msx.roomID = msg.roomID;
msx.vipTableID = msg.vipTableID;
msx.password = gt.getVipPswMd5();
//
msx.sessionID = friend.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(friend.getSession(), msx);
}
public void inviteFriend(InviteFriendEnterVipRoomMsg msg, Player pl) {
Player friend = playerService.getPlayerByPlayerID(msg.playerID);
if (friend == null)
return;
//
GameRoom gr = getRoom(msg.roomID);
if (gr == null)
return;
//
GameTable gt = gr.getVipTableByVipTableID(msg.vipTableID);
if (gt == null)
return;
//
// 只有房主可以邀请
if (gt.getCreatorPlayerID().equals(pl.getPlayerID())) {
//
BeInvitedEnterVipRoomMsg msx = new BeInvitedEnterVipRoomMsg();
msx.tableID = gt.getTableID();
msx.playerID = pl.getPlayerID();
msx.roomID = msg.roomID;
msx.vipTableID = msg.vipTableID;
msx.password = gt.getVipPswMd5();
//
msx.sessionID = friend.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(friend.getSession(), msx);
}
}
//
public void enterVipRoom(EnterVipRoomMsg msg, Player pl) {
GameRoom rm = null;
GameTable gt = null;
//
if (msg.tableID.equals("enter_room")) {
int vip_table_id = msg.roomID;
msg.roomID = 2002;
//
rm = gameRoomMap.get(2002);
gt = rm.getVipTableByVipTableID(vip_table_id);
public void enterVipRoom(EnterVipRoomMsg msg, Player pl) {
GameRoom rm = null;
GameTable gt = null;
//
if (msg.tableID.equals("enter_room")) {
int vip_table_id = msg.roomID;
msg.roomID = 2002;
//
rm = gameRoomMap.get(2002);
gt = rm.getVipTableByVipTableID(vip_table_id);
} else {
rm = gameRoomMap.get(msg.roomID);
if (rm == null) {
logger.error("enterVipRoom,rm==null, playerIndex="
+ pl.getPlayerIndex());
return;
}
//
gt = rm.getTable(msg.tableID, false);
}
//
if (gt == null) {
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
//
ack.result = ErrorCodeConstant.VIP_TABLE_NOT_FOUND;
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
rm = gameRoomMap.get(msg.roomID);
if (rm == null) {
logger.error("enterVipRoom,rm==null, playerIndex="
+ pl.getPlayerIndex());
return;
}
//
gt = rm.getTable(msg.tableID, false);
}
//
if (gt == null) {
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
//
ack.result = ErrorCodeConstant.VIP_TABLE_NOT_FOUND;
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
logger.error("enterVipRoom,gt==null, playerIndex="
+ pl.getPlayerIndex());
return;
}
+ pl.getPlayerIndex());
return;
}
if (gt.isVipTable()) {
if (!gt.isPayVipKa()) {
int diamond_need = playerService.getTableDiamondCost(gt
.getBaseHandsTotal());
if (false == playerService.preuse_fanka(pl, diamond_need))
return;
}
}
if (!gt.isPayVipKa()) {
int diamond_need = playerService.getTableDiamondCost(gt
.getBaseHandsTotal());
if (false == playerService.preuse_fanka(pl, diamond_need))
return;
}
}
// 现在不校验密码
// 密码错误
// if(gt.getVipPswMd5().equals(msg.psw)==false)
// {
// RequestStartGameMsgAck ack=new RequestStartGameMsgAck();
// ack.gold=pl.getGold();
// //
// ack.result=ErrorCodeConstant.WRONG_PASSWORD;
// //进入桌子,返回消息给玩家
// ack.sessionID=pl.getPlayerLobbySessionID();
// SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
// return;
// }
//
gt.setDizhu(rm.price);
// 密码错误
// if(gt.getVipPswMd5().equals(msg.psw)==false)
// {
// RequestStartGameMsgAck ack=new RequestStartGameMsgAck();
// ack.gold=pl.getGold();
// //
// ack.result=ErrorCodeConstant.WRONG_PASSWORD;
// //进入桌子,返回消息给玩家
// ack.sessionID=pl.getPlayerLobbySessionID();
// SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
// return;
// }
//
gt.setDizhu(rm.price);
//
int old_tablePos = gt.findPlayerIndex(pl);
boolean old_table = false;
if (old_tablePos >= 0)// 已经存在,离开又进来
{
old_table = true;
//
pl.setTableID(gt.getTableID());
pl.setVipTableID(gt.getTableID());
int old_tablePos = gt.findPlayerIndex(pl);
boolean old_table = false;
if (old_tablePos >= 0)// 已经存在,离开又进来
{
old_table = true;
//
pl.setTableID(gt.getTableID());
pl.setVipTableID(gt.getTableID());
} else {
if (gt.isFull()) {
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
//
ack.result = ErrorCodeConstant.VIP_TABLE_IS_FULL;
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
if (gt.isFull()) {
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
//
ack.result = ErrorCodeConstant.VIP_TABLE_IS_FULL;
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return;
}
}
// 新玩家进来,设置VIP房间金币
// if(pl.getVipTableGold() <= 0)
// {
// GameRoom gr=getRoom(gt.getRoomID());
// if( (gr!=null) && (gr.roomType == GameConstant.ROOM_TYPE_VIP))
// {
// pl.setVipTableGold(gr.fixedGold);
// }
// }
// if(pl.getVipTableGold() <= 0)
// {
// GameRoom gr=getRoom(gt.getRoomID());
// if( (gr!=null) && (gr.roomType == GameConstant.ROOM_TYPE_VIP))
// {
// pl.setVipTableGold(gr.fixedGold);
// }
// }
gt.enterTable(pl);
}
// 如等待玩家中,满了就开始,如果中间断线再进入,就不要这个状态切换
if (gt.isFull()
&& gt.getState() == GameConstant.GAME_TABLE_STATE_WAITING_PLAYER) {
gt.setState(GameConstant.GAME_TABLE_STATE_READY_GO);
}
}
// 如等待玩家中,满了就开始,如果中间断线再进入,就不要这个状态切换
if (gt.isFull()
&& gt.getState() == GameConstant.GAME_TABLE_STATE_WAITING_PLAYER) {
gt.setState(GameConstant.GAME_TABLE_STATE_READY_GO);
}
//
pl.setRoomID(msg.roomID);
pl.setTableID(gt.getTableID());
pl.setVipTableID(gt.getTableID());
//
boolean re_enter = false;
if (old_table && gt.isFull())
re_enter = true;
pl.setRoomID(msg.roomID);
pl.setTableID(gt.getTableID());
pl.setVipTableID(gt.getTableID());
//
boolean re_enter = false;
if (old_table && gt.isFull())
re_enter = true;
enter_table_done(pl, gt, re_enter);
}
//
// vip开房间,在服务器理解为创建一个vip桌子
public void create_vip_table(Player pl, String psw, int quanNum,
int roomID, int vip_rule) {
GameRoom rm = gameRoomMap.get(roomID);
if (rm == null)
return;
public void create_vip_table(Player pl, String psw, int quanNum,
int roomID, int vip_rule) {
GameRoom rm = gameRoomMap.get(roomID);
if (rm == null)
return;
String vip_tb_id = pl.getVipTableID();
if (vip_tb_id != null && vip_tb_id.length() > 1
&& rm.getPlayingTablesMap().containsKey(vip_tb_id)) {
logger.error("player index:" + pl.getPlayerIndex() + ",md5:" + psw
+ ",ordin vip_rule:" + vip_rule + ",vip tableid:"
+ pl.getVipTableID());
return;
}
if (vip_tb_id != null && vip_tb_id.length() > 1
&& rm.getPlayingTablesMap().containsKey(vip_tb_id)) {
logger.error("player index:" + pl.getPlayerIndex() + ",md5:" + psw
+ ",ordin vip_rule:" + vip_rule + ",vip tableid:"
+ pl.getVipTableID());
return;
}
// vip默认具有的打法,毋须客户端配置
int default_rule = rm.get_default_vip_table_rule(SystemConfig.mjType);
int default_rule = rm.get_default_vip_table_rule(SystemConfig.mjType);
//
vip_rule |= default_rule;
int personNum = 4;
if ((vip_rule & GameConstant.GAME_PLAY_2_PERSON) != 0) {
personNum = 2;
} else if ((vip_rule & GameConstant.GAME_PLAY_3_PERSON) != 0) {
personNum = 2;
}
if ((vip_rule & GameConstant.GAME_PLAY_2_PERSON) != 0) {
personNum = 2;
} else if ((vip_rule & GameConstant.GAME_PLAY_3_PERSON) != 0) {
personNum = 2;
}
//
GameTable gt = rm.createVipTable(psw, pl, personNum);
if (gt == null)
return;
//
gt.setBaseHandsTotal(quanNum);
logger.info("tableid=" + gt.getTableID() + ",hands=" + quanNum);
GameTable gt = rm.createVipTable(psw, pl, personNum);
if (gt == null)
return;
//
gt.setBaseHandsTotal(quanNum);
logger.info("tableid=" + gt.getTableID() + ",hands=" + quanNum);
gt.setVip_rule(vip_rule);
//
//
if (gt.has_vip_rule(GameConstant.GAME_PLAY_2_PERSON))
gt.setMaxPlayer(2);
else if (gt.has_vip_rule(GameConstant.GAME_PLAY_3_PERSON))
gt.setMaxPlayer(2);
else
gt.setMaxPlayer(4);
gt.setMaxPlayer(2);
else if (gt.has_vip_rule(GameConstant.GAME_PLAY_3_PERSON))
gt.setMaxPlayer(2);
else
gt.setMaxPlayer(4);
//
Date ct = DateService.getCurrentUtilDate();
gt.setVipCreateTime(ct.getTime());
// 总圈数
gt.setHandsTotal(quanNum);
//
// 设置为未支付房卡
gt.setPayVipKa(false);
gt.setPayVipKa(false);
// 设置VIP房间带入金额
pl.setVipTableGold(0);
pl.setOnTable(true);
//
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
ack.totalHand = gt.getHandsTotal();
ack.currentHand = gt.getHandNum();
//
ack.newPlayWay = gt.getVip_rule();
//
ack.result = ErrorCodeConstant.CMD_EXE_OK;
//
ack.init_players(gt.getPlayers(), gt.isVipTable());
//
ack.roomID = roomID;
// ack.tablePos=pl.getTablePos();
ack.tablePos = pl.getTablePos() | (gt.getMaxPlayer() << 16);
//
ack.vipTableID = gt.getVipTableID();
ack.creatorName = gt.getCreatorPlayerName();
ack.createPlayerID = gt.getCreatorPlayerID();
// 进入桌子,发消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
//
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
ack.totalHand = gt.getHandsTotal();
ack.currentHand = gt.getHandNum();
//
ack.newPlayWay = gt.getVip_rule();
//
ack.result = ErrorCodeConstant.CMD_EXE_OK;
//
ack.init_players(gt.getPlayers(), gt.isVipTable());
//
ack.roomID = roomID;
// ack.tablePos=pl.getTablePos();
ack.tablePos = pl.getTablePos() | (gt.getMaxPlayer() << 16);
//
ack.vipTableID = gt.getVipTableID();
ack.creatorName = gt.getCreatorPlayerName();
ack.createPlayerID = gt.getCreatorPlayerID();
// 进入桌子,发消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
//
// System.out.println("vip table id="+gt.getVipTableID());
// 测试允许机器人进入vip
// machineService.newset_machinetime(pl,gt);
// System.out.println("vip table id="+gt.getVipTableID());
// 测试允许机器人进入vip
// machineService.newset_machinetime(pl,gt);
/*
* //在游戏开始的时候4个人一起创建,因为房间有可能没开始游戏就解散了 //创建一条vip房间记录 VipRoomRecord
* vrr=new VipRoomRecord();
* vrr.setStartTime(DateService.getCurrentUtilDate());
* vrr.setRoomID(gt.getTableID()); vrr.setRoomIndex(gt.getVipTableID());
* vrr.setPlayer1ID(pl.getPlayerID()); //
* vrr.setHostName(pl.getPlayerName()); //
* vrr.setRecordID(UUIDGenerator.generatorUUID()); //
* playerService.createVipRoomRecord(vrr); // pl.setVrr(vrr);
*/
}
* //在游戏开始的时候4个人一起创建,因为房间有可能没开始游戏就解散了 //创建一条vip房间记录 VipRoomRecord
* vrr=new VipRoomRecord();
* vrr.setStartTime(DateService.getCurrentUtilDate());
* vrr.setRoomID(gt.getTableID()); vrr.setRoomIndex(gt.getVipTableID());
* vrr.setPlayer1ID(pl.getPlayerID()); //
* vrr.setHostName(pl.getPlayerName()); //
* vrr.setRecordID(UUIDGenerator.generatorUUID()); //
* playerService.createVipRoomRecord(vrr); // pl.setVrr(vrr);
*/
}
// 看看是否有老桌需要他进去,牌局未结束,不能离开
private boolean enter_old_table(Player pl) {
int roomID = pl.getRoomID();
GameRoom rm = gameRoomMap.get(roomID);
if (rm == null)
return false;
private boolean enter_old_table(Player pl) {
int roomID = pl.getRoomID();
GameRoom rm = gameRoomMap.get(roomID);
if (rm == null)
return false;
GameTable gt = rm.getTable(pl.getTableID(), pl.isPlayingSingleTable());
if (gt != null
&& /* (gt.getState()==GameConstant.GAME_TABLE_STATE_PAUSED) && */(gt
.findPlayerIndex(pl) >= 0)) {
if ((gt.getState() == GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE || gt
.getState() != GameConstant.GAME_TABLE_STATE_WAITING_PLAYER)) {
if (!validatePlayerGold(rm, pl))
return false;
}
&& /* (gt.getState()==GameConstant.GAME_TABLE_STATE_PAUSED) && */(gt
.findPlayerIndex(pl) >= 0)) {
if ((gt.getState() == GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE || gt
.getState() != GameConstant.GAME_TABLE_STATE_WAITING_PLAYER)) {
if (!validatePlayerGold(rm, pl))
return false;
}
enter_table_done(pl, gt, true);
return true;
}
}
return false;
}
}
//
public void enter_room(Player pl, int roomID) {
// 重置异常标志
pl.setNeedCopyGameState(false);
public void enter_room(Player pl, int roomID) {
// 重置异常标志
pl.setNeedCopyGameState(false);
// 当前正在vip房间中,不能进其他房间,自动进vip房
if (pl.getVipTableID().length() > 0) {
GameRoom rm = gameRoomMap.get(pl.getRoomID());
if (rm == null)
return;
if (pl.getVipTableID().length() > 0) {
GameRoom rm = gameRoomMap.get(pl.getRoomID());
if (rm == null)
return;
GameTable gt = rm.getTable(pl.getTableID(), false);
if (gt != null) {
EnterVipRoomMsg mxg = new EnterVipRoomMsg();
mxg.tableID = gt.getTableID();
mxg.psw = gt.getVipPswMd5();
mxg.roomID = pl.getRoomID();
enterVipRoom(mxg, pl);
return;
}
}
EnterVipRoomMsg mxg = new EnterVipRoomMsg();
mxg.tableID = gt.getTableID();
mxg.psw = gt.getVipPswMd5();
mxg.roomID = pl.getRoomID();
enterVipRoom(mxg, pl);
return;
}
}
GameRoom rm = gameRoomMap.get(roomID);
// 看看是否进老桌子
if (enter_old_table(pl)) {
return;
} else {
// 看看是否进老桌子
if (enter_old_table(pl)) {
return;
} else {
// 看看是否还在桌子上
List<GameTable> oldTables = this.getPlayingTables(pl
.getPlayerIndex());
if (oldTables != null && oldTables.size() >= 1) {
// 还在老桌子中
GameTable oldTable = oldTables.get(0);
if (oldTable != null) {
// logger.error("玩家:" + pl.getPlayerIndex() +
// ",断线重连,遍历房间才找到老桌子,roomID=" + oldTable.getRoomID());
List<GameTable> oldTables = this.getPlayingTables(pl
.getPlayerIndex());
if (oldTables != null && oldTables.size() >= 1) {
// 还在老桌子中
GameTable oldTable = oldTables.get(0);
if (oldTable != null) {
// logger.error("玩家:" + pl.getPlayerIndex() +
// ",断线重连,遍历房间才找到老桌子,roomID=" + oldTable.getRoomID());
pl.setRoomID(oldTable.getRoomID());
pl.setTableID(oldTable.getTableID());
pl.setNeedCopyGameState(true); // 玩家数据异常需要恢复游戏数据
pl.setTableID(oldTable.getTableID());
pl.setNeedCopyGameState(true); // 玩家数据异常需要恢复游戏数据
if (oldTable.isVipTable()) {
pl.setVipTableID(oldTable.getTableID());
pl.setVipTableID(oldTable.getTableID());
// VIP房间处理
EnterVipRoomMsg mxg = new EnterVipRoomMsg();
mxg.tableID = oldTable.getTableID();
mxg.psw = oldTable.getVipPswMd5();
mxg.roomID = pl.getRoomID();
enterVipRoom(mxg, pl);
return;
}
}
}
EnterVipRoomMsg mxg = new EnterVipRoomMsg();
mxg.tableID = oldTable.getTableID();
mxg.psw = oldTable.getVipPswMd5();
mxg.roomID = pl.getRoomID();
enterVipRoom(mxg, pl);
return;
}
}
}
// 校验金币是否足够
if (!validatePlayerGold(rm, pl))
return;
}
if (!validatePlayerGold(rm, pl))
return;
}
// 判断今日输赢是否已达到上限
if (cfgService == null)
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
if (cfgService == null)
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
if (Math.abs(pl.getTodayRecordByRoomType(rm.roomType)) >= cfgService
.getRoomMaxWinLose(rm.roomType)) {
// 已达到场次输赢上限
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = cfgService.getRoomMaxWinLose(rm.roomType);
ack.result = ErrorCodeConstant.TODAY_GAME_RECORD_OUT_LIMIT_IN_ROOM;
.getRoomMaxWinLose(rm.roomType)) {
// 已达到场次输赢上限
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = cfgService.getRoomMaxWinLose(rm.roomType);
ack.result = ErrorCodeConstant.TODAY_GAME_RECORD_OUT_LIMIT_IN_ROOM;
// 进入桌子失败
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return;
} else if (Math.abs(pl.getTodayRecordCount()) >= cfgService
.getMaxWinLoseEveryDay()) {
// 达到个人输赢上限
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = cfgService.getMaxWinLoseEveryDay();
ack.result = ErrorCodeConstant.TODAY_GAME_RECORD_OUT_LIMIT_IN_GAME;
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return;
} else if (Math.abs(pl.getTodayRecordCount()) >= cfgService
.getMaxWinLoseEveryDay()) {
// 达到个人输赢上限
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = cfgService.getMaxWinLoseEveryDay();
ack.result = ErrorCodeConstant.TODAY_GAME_RECORD_OUT_LIMIT_IN_GAME;
// 进入桌子失败
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return;
}
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return;
}
//
GameTable gt = rm.enterRoom(pl, SystemConfig.mjType);
enter_table_done(pl, gt, false);
//
machineService.newset_machinetime(pl, gt);
}
GameTable gt = rm.enterRoom(pl, SystemConfig.mjType);
enter_table_done(pl, gt, false);
//
machineService.newset_machinetime(pl, gt);
}
public boolean validatePlayerGold(GameRoom rm, Player pl) {
if (rm == null)
return false;
return false;
if (cfgService == null)
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
//
// 进新桌,需要校验金币
int minGold = rm.minGold;
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
//
// 进新桌,需要校验金币
int minGold = rm.minGold;
// 如果是进入VIP房间,只要校验完金币就可以了
if (rm.roomType == GameConstant.ROOM_TYPE_VIP) {
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
if (rm.roomType == GameConstant.ROOM_TYPE_VIP) {
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
ack.roomID = rm.roomID;
ack.roomID = rm.roomID;
ack.result = ErrorCodeConstant.CAN_ENTER_VIP_ROOM;
//
// 可以进入VIP房间
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return false;
}
//
// 可以进入VIP房间
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return false;
}
if (pl.getGold() < minGold) {
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
ack.result = ErrorCodeConstant.GOLD_LOW_THAN_MIN_LIMIT;
// 进入桌子失败
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return false;
} else if (pl.getGold() > rm.maxGold) {
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
// 进入桌子失败
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return false;
} else if (pl.getGold() > rm.maxGold) {
// 返回给玩家,
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.gold = pl.getGold();
ack.result = ErrorCodeConstant.GOLD_HIGH_THAN_MAX_LIMIT;
// 进入桌子失败
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return false;
}
// 进入桌子失败
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
return false;
}
return true;
}
}
//
private void re_notify_current_operation_player(GameTable gt) {
// 1先看看有没有吃碰杠提示的玩家
MahjongCheckResult result = gt.getWaitingPlayerOperate();
if (result != null) {
Player plx = gt.getPlayerAtIndex(result.playerTableIndex);
if (plx != null) {
//
PlayerOperationNotifyMsg msg = new PlayerOperationNotifyMsg();
private void re_notify_current_operation_player(GameTable gt) {
// 1先看看有没有吃碰杠提示的玩家
MahjongCheckResult result = gt.getWaitingPlayerOperate();
if (result != null) {
Player plx = gt.getPlayerAtIndex(result.playerTableIndex);
if (plx != null) {
//
PlayerOperationNotifyMsg msg = new PlayerOperationNotifyMsg();
// 提示玩家出牌
msg.operation = result.opertaion;
msg.operation = result.opertaion;
msg.player_table_pos = result.playerTableIndex;
msg.chi_card_value = result.chi_card_value;
if (((msg.operation & GameConstant.MAHJONG_OPERTAION_CHU) == GameConstant.MAHJONG_OPERTAION_CHU)
&& (plx.getCardGrab() != 0)) {
msg.chi_card_value = plx.getCardGrab(); // 新摸到的牌
}
msg.peng_card_value = result.peng_card_value;
msg.target_card = result.targetCard;
msg.tingList = result.tingList;
msg.gangList = result.gangList;
msg.chi_flag = result.chi_flag;
msg.cardLeftNum = gt.getCardLeftNum();
//
msg.sessionID = plx.getPlayerLobbySessionID();
// SystemConfig.gameSocketServer.sendMsg(plx.getSession(), msg);
this.sengMsgToPlayer(gt, plx, msg);
//
// 发给其他玩家,让他们知道当前轮到谁操作
PlayerOperationNotifyMsg msg2 = new PlayerOperationNotifyMsg();
msg2.operation = GameConstant.MAHJONG_OPERTAION_TIP;
msg2.cardLeftNum = gt.getCardLeftNum();
msg2.player_table_pos = plx.getTablePos();
this.sendMsgToTable(gt, msg2);
}
} else {
// 没有吃碰听,那就当前玩家出牌
player_chu_notify(gt, true, true);
}
msg.chi_card_value = result.chi_card_value;
if (((msg.operation & GameConstant.MAHJONG_OPERTAION_CHU) == GameConstant.MAHJONG_OPERTAION_CHU)
&& (plx.getCardGrab() != 0)) {
msg.chi_card_value = plx.getCardGrab(); // 新摸到的牌
}
msg.peng_card_value = result.peng_card_value;
msg.target_card = result.targetCard;
msg.tingList = result.tingList;
msg.gangList = result.gangList;
msg.chi_flag = result.chi_flag;
msg.cardLeftNum = gt.getCardLeftNum();
//
msg.sessionID = plx.getPlayerLobbySessionID();
// SystemConfig.gameSocketServer.sendMsg(plx.getSession(), msg);
this.sengMsgToPlayer(gt, plx, msg);
//
// 发给其他玩家,让他们知道当前轮到谁操作
PlayerOperationNotifyMsg msg2 = new PlayerOperationNotifyMsg();
msg2.operation = GameConstant.MAHJONG_OPERTAION_TIP;
msg2.cardLeftNum = gt.getCardLeftNum();
msg2.player_table_pos = plx.getTablePos();
this.sendMsgToTable(gt, msg2);
}
} else {
// 没有吃碰听,那就当前玩家出牌
player_chu_notify(gt, true, true);
}
}
//
// 离开重新进入
private void player_re_enter(Player pl, GameTable gt) {
// 恢复状态
if (gt.getBackup_state() == GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE) {
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
// 离开重新进入
private void player_re_enter(Player pl, GameTable gt) {
// 恢复状态
if (gt.getBackup_state() == GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE) {
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
// 给桌子上的其他玩家发个进入新玩家的消息
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_TABLE_ADD_NEW_PLAYER;
axk.playerName = pl.getPlayerName();
axk.targetPlayerName = pl.getHeadImageUrl();
if (gt.isVipTable()) {
axk.gold = pl.getVipTableGold();
} else {
axk.gold = pl.getGold();
}
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.tablePos = pl.getTablePos();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();
axk.ip = pl.getClientIP();
axk.sessionID = pl.getPlayerLobbySessionID();
axk.opValue = gt.getMaxPlayer();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
} else {
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_PLAYING);
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_TABLE_ADD_NEW_PLAYER;
axk.playerName = pl.getPlayerName();
axk.targetPlayerName = pl.getHeadImageUrl();
if (gt.isVipTable()) {
axk.gold = pl.getVipTableGold();
} else {
axk.gold = pl.getGold();
}
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.tablePos = pl.getTablePos();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();
axk.ip = pl.getClientIP();
axk.sessionID = pl.getPlayerLobbySessionID();
axk.opValue = gt.getMaxPlayer();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
} else {
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_PLAYING);
// 给桌子上的其他玩家发个玩家上线的消息
PlayerOperationNotifyMsg axk = new PlayerOperationNotifyMsg();
axk.operation = GameConstant.MAHJONG_OPERTAION_ONLINE;
axk.player_table_pos = pl.getTablePos();
axk.sessionID = pl.getPlayerLobbySessionID();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
}
PlayerOperationNotifyMsg axk = new PlayerOperationNotifyMsg();
axk.operation = GameConstant.MAHJONG_OPERTAION_ONLINE;
axk.player_table_pos = pl.getTablePos();
axk.sessionID = pl.getPlayerLobbySessionID();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
}
// 取消托管
pl.setAutoOperation(0);
pl.setAutoOperation(0);
// 发送断线重连消息
player_recover(gt, pl);
player_recover(gt, pl);
// 看看桌子上玩家是否都已经到齐
gt.pauseContinue();
gt.pauseContinue();
// 打印所有玩家的状态
// logger.info("玩家:" + pl.getPlayerIndex() + "断线重回,房间ID:" +
// gt.getRoomID() + ",桌子状态:" + gt.getState() + ",前一个状态:" +
// gt.getBackup_state());
// for(Player onePl:gt.getPlayers())
// {
// logger.info("玩家ID:" + onePl.getPlayerIndex() + " 状态:" +
// onePl.getGameState());
// }
// logger.info("玩家:" + pl.getPlayerIndex() + "断线重回,房间ID:" +
// gt.getRoomID() + ",桌子状态:" + gt.getState() + ",前一个状态:" +
// gt.getBackup_state());
// for(Player onePl:gt.getPlayers())
// {
// logger.info("玩家ID:" + onePl.getPlayerIndex() + " 状态:" +
// onePl.getGameState());
// }
if (gt.getState() == GameConstant.GAME_TABLE_STATE_PLAYING) {
// 断线回来,如果当前桌子子状态为0,说明没有等待状态,直接提示当前玩家行动
if (gt.getPlaySubstate() == 0)//
{
// 通知玩家行动
re_notify_current_operation_player(gt);
} else {
// 否则就把等待时间设置为当前,系统等待一定时间后,提示玩家进行应该进行的动作,比如有玩家吃碰等
Date dt = DateService.getCurrentUtilDate();
gt.setWaitingStartTime(dt.getTime());
}
}
//
// System.out.println("back:"+pl.getPlayerName()+",player
// num="+gt.getPlayers().size());
try_Closevip(gt,pl);
}
// 断线回来,如果当前桌子子状态为0,说明没有等待状态,直接提示当前玩家行动
if (gt.getPlaySubstate() == 0)//
{
// 通知玩家行动
re_notify_current_operation_player(gt);
} else {
// 否则就把等待时间设置为当前,系统等待一定时间后,提示玩家进行应该进行的动作,比如有玩家吃碰等
Date dt = DateService.getCurrentUtilDate();
gt.setWaitingStartTime(dt.getTime());
}
}
//
// System.out.println("back:"+pl.getPlayerName()+",player
// num="+gt.getPlayers().size());
try_Closevip(gt,pl);
}
//
private void enter_table_done(Player pl, GameTable gt, boolean re_enter) {
// 玩家坐在桌子上
pl.setOnTable(true);
pl.setAutoOperation(0);
private void enter_table_done(Player pl, GameTable gt, boolean re_enter) {
// 玩家坐在桌子上
pl.setOnTable(true);
pl.setAutoOperation(0);
RequestStartGameMsgAck ack = new RequestStartGameMsgAck();
ack.totalHand = gt.getHandsTotal();
ack.currentHand = gt.getHandNum();
ack.totalHand = gt.getHandsTotal();
ack.currentHand = gt.getHandNum();
if (gt.getState() == GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE) {
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
// gt.set_not_ready_player_ready();
} else if (gt.getState() == GameConstant.GAME_TABLE_STATE_PAUSED) {
if (gt.getBackup_state() == GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE) {
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
} else {
pl
.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_PLAYING);
}
}
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
// gt.set_not_ready_player_ready();
} else if (gt.getState() == GameConstant.GAME_TABLE_STATE_PAUSED) {
if (gt.getBackup_state() == GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE) {
pl.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_READY);
} else {
pl
.setGameState(GameConstant.PALYER_GAME_STATE_IN_TABLE_PLAYING);
}
}
//
ack.result = ErrorCodeConstant.CMD_EXE_OK;
//
ack.init_players(gt.getPlayers(), gt.isVipTable());
//
ack.gold = pl.getGold();
//
ack.roomID = pl.getRoomID();
// ack.tablePos=pl.getTablePos();
ack.tablePos = pl.getTablePos() | (gt.getMaxPlayer() << 16);
ack.newPlayWay = gt.getVip_rule();
ack.result = ErrorCodeConstant.CMD_EXE_OK;
//
ack.init_players(gt.getPlayers(), gt.isVipTable());
//
ack.gold = pl.getGold();
//
ack.roomID = pl.getRoomID();
// ack.tablePos=pl.getTablePos();
ack.tablePos = pl.getTablePos() | (gt.getMaxPlayer() << 16);
ack.newPlayWay = gt.getVip_rule();
GameRoom gr = getRoom(gt.getRoomID());
if ((gr != null) && (gr.roomType == GameConstant.ROOM_TYPE_VIP)) {
ack.vipTableID = gt.getVipTableID();
if ((gr != null) && (gr.roomType == GameConstant.ROOM_TYPE_VIP)) {
ack.vipTableID = gt.getVipTableID();
}
ack.creatorName = gt.getCreatorPlayerName();
ack.createPlayerID = gt.getCreatorPlayerID();
//
// Date ct=DateService.getCurrentUtilDate();
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
//
ack.creatorName = gt.getCreatorPlayerName();
ack.createPlayerID = gt.getCreatorPlayerID();
//
// Date ct=DateService.getCurrentUtilDate();
// 进入桌子,返回消息给玩家
ack.sessionID = pl.getPlayerLobbySessionID();
SystemConfig.gameSocketServer.sendMsg(pl.getSession(), ack);
//
if (re_enter
&& (gt.getState() != GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE/*
* ||
* gt.isVipTable()
*/))// 断线返回,VIP房间在结算的时候断线回来要走下面的分支
{
player_re_enter(pl, gt);
} else {
// 设置VIP房间带入金额
// if( (gr!=null) && (gr.roomType == GameConstant.ROOM_TYPE_VIP) &&
// (pl.getVipTableGold() <= 0))
// {
// pl.setVipTableGold(gr.fixedGold);
// }
&& (gt.getState() != GameConstant.GAME_TABLE_STATE_WAITING_PALYER_TO_CONTINUE/*
* ||
* gt.isVipTable()
*/))// 断线返回,VIP房间在结算的时候断线回来要走下面的分支
{
player_re_enter(pl, gt);
} else {
// 设置VIP房间带入金额
// if( (gr!=null) && (gr.roomType == GameConstant.ROOM_TYPE_VIP) &&
// (pl.getVipTableGold() <= 0))
// {
// pl.setVipTableGold(gr.fixedGold);
// }
// 给桌子上的其他玩家发个进入新玩家的消息
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_TABLE_ADD_NEW_PLAYER;
axk.playerName = pl.getPlayerName();
axk.targetPlayerName = pl.getHeadImageUrl();
if (gt.isVipTable()) {
axk.gold = pl.getVipTableGold();
} else {
axk.gold = pl.getGold();
}
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.tablePos = pl.getTablePos();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();
axk.ip = pl.getClientIP();
axk.sessionID = pl.getPlayerLobbySessionID();
axk.opValue = gt.getMaxPlayer();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
//
// System.out.println("enter:"+pl.getPlayerName()+",player
// num="+gt.getPlayers().size());
}
}
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_TABLE_ADD_NEW_PLAYER;
axk.playerName = pl.getPlayerName();
axk.targetPlayerName = pl.getHeadImageUrl();
if (gt.isVipTable()) {
axk.gold = pl.getVipTableGold();
} else {
axk.gold = pl.getGold();
}
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.tablePos = pl.getTablePos();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();
axk.ip = pl.getClientIP();
axk.sessionID = pl.getPlayerLobbySessionID();
axk.opValue = gt.getMaxPlayer();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
//
// System.out.println("enter:"+pl.getPlayerName()+",player
// num="+gt.getPlayers().size());
}
}
// 游戏循环
public void run_one_loop() {
if (cfgService == null)
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
public void run_one_loop() {
if (cfgService == null)
cfgService = (ISystemConfigService) SpringService
.getBean("sysConfigService");
// System.out.println("房间数量:"+gameRooms.size());
for (Integer rid : gameRoomMap.keySet()) {
GameRoom gr = gameRoomMap.get(rid);
game_room_tick(gr);
}
}
for (Integer rid : gameRoomMap.keySet()) {
GameRoom gr = gameRoomMap.get(rid);
game_room_tick(gr);
}
}
//
public void use_item(Player pl, ItemBase ib) {
public void use_item(Player pl, ItemBase ib) {
}
//
//
public void player_left_table(Player pl) {
if (pl == null)
return;
public void player_left_table(Player pl) {
if (pl == null)
return;
GameRoom gr = this.getRoom(pl.getRoomID());
if (gr == null)
return;
//
GameTable gt = gr.getTable(pl.getTableID(), pl.isPlayingSingleTable());
if (gt == null) {
return;
}
if (gr == null)
return;
//
GameTable gt = gr.getTable(pl.getTableID(), pl.isPlayingSingleTable());
if (gt == null) {
return;
}
// 玩家不在桌子上
pl.setOnTable(false);
//
if (gt.couldLeft(pl)) {
//
boolean found = gt.removePlayer(pl.getPlayerID());
pl.setOnTable(false);
//
if (gt.couldLeft(pl)) {
//
boolean found = gt.removePlayer(pl.getPlayerID());
if (pl.isRobot()) {
machineService.death_machine(pl.getPlayerIndex());
}
machineService.death_machine(pl.getPlayerIndex());
}
// if(gt.isAllRobot()){
// gt.remove_robots_table();
// death_machine(gt);
// }
// gt.remove_robots_table();
// death_machine(gt);
// }
//
if (found) {
gr.setPlayerNum(gr.getPlayerNum() - 1);
gt.addFreePos(pl.getTablePos());
}
if (found) {
gr.setPlayerNum(gr.getPlayerNum() - 1);
gt.addFreePos(pl.getTablePos());
}
// 如果vip离开桌子,全部清理
if (gt.isVipTable()
&& pl.getPlayerID().equals(gt.getCreatorPlayerID())) {
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_ROOM_DISMISS;
axk.sessionID = pl.getPlayerLobbySessionID();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
//
gt.clear_all();
}
//
if (gt.getPlayerNum() > 0) {
// 如果还有玩家,通知他们有玩家离开
if (found) {
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_PLAYER_LEFT_TABLE;
axk.playerName = pl.getPlayerName();
axk.gold = pl.getGold();
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();
if (gt.isVipTable()
&& pl.getPlayerID().equals(gt.getCreatorPlayerID())) {
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_ROOM_DISMISS;
axk.sessionID = pl.getPlayerLobbySessionID();
this.sendMsgToTableExceptMe(gt, axk, pl.getPlayerID());
//
gt.clear_all();
}
//
if (gt.getPlayerNum() > 0) {
// 如果还有玩家,通知他们有玩家离开
if (found) {
PlayerGameOpertaionAckMsg axk = new PlayerGameOpertaionAckMsg();
axk.opertaionID = GameConstant.GAME_OPERTAION_PLAYER_LEFT_TABLE;
axk.playerName = pl.getPlayerName();
axk.gold = pl.getGold();
axk.headImg = pl.getHeadImg();
axk.sex = pl.getSex();
axk.playerID = pl.getPlayerID();
axk.playerIndex = pl.getPlayerIndex();
axk.canFriend = pl.getCanFriend();