390 lines
14 KiB
Java
390 lines
14 KiB
Java
package extend.zp;
|
|
|
|
import java.util.Collections;
|
|
import java.util.Map.Entry;
|
|
|
|
import com.game.GameController;
|
|
import com.game.Global;
|
|
import com.game.Util;
|
|
import com.game.data.Player;
|
|
import com.game.player.state.PlayerWaitState;
|
|
import com.taurus.core.entity.ITArray;
|
|
import com.taurus.core.entity.ITObject;
|
|
import com.taurus.core.entity.TArray;
|
|
import com.taurus.core.entity.TObject;
|
|
import com.taurus.core.routes.ActionKey;
|
|
import com.taurus.core.util.Logger;
|
|
import com.taurus.core.util.Utils;
|
|
import com.taurus.permanent.data.Session;
|
|
|
|
import extend.zp.uitl.CardUtil;
|
|
import com.taurus.core.plugin.redis.Redis;
|
|
import redis.clients.jedis.Jedis;
|
|
|
|
|
|
|
|
public class EXGameController extends GameController {
|
|
Logger logger = Logger.getLogger(getClass());
|
|
public EXGameController() {
|
|
super();
|
|
}
|
|
|
|
|
|
@ActionKey(Config.GAME_ACTION)
|
|
public void RouterAction(Session sender,ITObject params,int gid,Player owner) {
|
|
owner.stateMachine.execute(EXActionEvent.EVENT_ACTION, 0, params);
|
|
}
|
|
|
|
@ActionKey(Config.GAME_DIS_CARD)
|
|
public void RouterDisCard(Session sender,ITObject params,int gid,Player owner) {
|
|
owner.stateMachine.execute(EXActionEvent.EVENT_DISCARD, 0, params);
|
|
}
|
|
|
|
@ActionKey(Config.GAME_CHANGE_PAIXING)
|
|
public void RouterChangePaixing(Session sender,ITObject params,int gid,Player owner) {
|
|
EXPlayer player = (EXPlayer) owner;
|
|
player.getRoom().changePaiXing(player, params);
|
|
}
|
|
|
|
|
|
|
|
@ActionKey(Config.GAME_CHANGE_TYPEFACE)
|
|
public void RouterChangeTypeFace(Session sender,ITObject params,int gid,Player owner) {
|
|
EXPlayer player = (EXPlayer) owner;
|
|
int typeface = params.getInt("typeface");
|
|
player.getRoom().typeface = typeface;
|
|
}
|
|
|
|
public void changeActiveSeat(EXRoom owner, int activeSeat) {
|
|
owner.activeSeat = activeSeat;
|
|
ITObject param = new TObject();
|
|
param.putInt("seat", activeSeat);
|
|
owner.broadCastToClient(0, Config.GAME_EVT_CHANGE_ACTIVE_PLAYER, param);
|
|
}
|
|
|
|
public void getCard(EXPlayer player, int leftCount) {
|
|
ITObject param = new TObject();
|
|
param.putInt("card", player.drawCard);
|
|
param.putInt("seat", player.room.activeSeat);
|
|
param.putInt("left_count", leftCount);
|
|
player.sendEvent(Config.GAME_EVT_DRAW, param);
|
|
|
|
player.getRoom().getPlayBack().addGetCardCommand(player.room.activeSeat, player.drawCard, leftCount);
|
|
}
|
|
|
|
@ActionKey(Config.GAME_EVT_FANGPAO)
|
|
public void RouterFangwei(Session sender,ITObject params,int gid,Player owner){
|
|
EXPlayer player = (EXPlayer) owner;
|
|
int discard = params.getInt("card");
|
|
ITObject response = new TObject();
|
|
response.putInt("seat", owner.seat);
|
|
response.putInt("card", discard);
|
|
logger.info("jefe GAME_EVT_FANGPAO:" + discard+";player:"+player.playerid);
|
|
owner.room.broadCastToClient(0, Config.GAME_EVT_DISCARD, response);
|
|
|
|
//记录用户放跑
|
|
Jedis jedis = Redis.use("group1_db5").getJedis();
|
|
jedis.hset("pao"+player.room+player.room.round+player.playerid,"fanpao",discard+"");
|
|
jedis.close();
|
|
EXRoom room = player.getRoom();
|
|
room.getPlayBack().addOutCardCommand(player.seat, discard);
|
|
room.activeCard = discard;
|
|
room.lastDiscardSeat = player.seat;
|
|
room.currenDiscardSeat = 0;
|
|
CardUtil.removeCard(player.cardInhand, discard, 1);
|
|
room.broadCastToServer(player.playerid, EXActionEvent.EVENT_OTHER_DISCARD, discard);
|
|
}
|
|
|
|
public void outCard(EXPlayer player, int discard) {
|
|
logger.info("jefe outcard:" + discard+";player:"+player.playerid);
|
|
//判断是否有喂
|
|
Jedis jedis = Redis.use("group1_db5").getJedis();
|
|
String wei = jedis.hget("p"+player.room+player.room.round,"4,"+discard);
|
|
jedis.close();
|
|
ITObject response = new TObject();
|
|
response.putInt("seat", player.seat);
|
|
response.putInt("card", discard);
|
|
logger.info("jefe roomId:" + player.room+",playerid:"+player.playerid +",card:"+discard+",wei:"+wei+",round:"+player.room.round);
|
|
if (wei!=null){
|
|
logger.info("jefe roomId:" + player.room +",wei:"+wei);
|
|
//player.room.broadCastToClient(player.playerid, Config.GAME_EVT_FANGWEI, response);
|
|
player.sendEvent(Config.GAME_EVT_FANGWEI, response);
|
|
|
|
}else{
|
|
|
|
player.room.broadCastToClient(0, Config.GAME_EVT_DISCARD, response);
|
|
|
|
EXRoom room = player.getRoom();
|
|
room.getPlayBack().addOutCardCommand(player.seat, discard);
|
|
|
|
room.activeCard = discard;
|
|
room.lastDiscardSeat = player.seat;
|
|
room.currenDiscardSeat = 0;
|
|
|
|
CardUtil.removeCard(player.cardInhand, discard, 1);
|
|
room.broadCastToServer(player.playerid, EXActionEvent.EVENT_OTHER_DISCARD, discard);
|
|
}
|
|
//jedis.close();
|
|
}
|
|
|
|
public void actionCard(EXPlayer player, int active_card, int card, int type, int from_seat) {
|
|
actionCard(player, active_card, card, type, from_seat, null);
|
|
}
|
|
|
|
public void actionCard(EXPlayer player, int active_card, int card, int type, int from_seat, ITArray opcardArray) {
|
|
//放跑不能吃碰等
|
|
|
|
ITObject paramBroadCast = new TObject();
|
|
paramBroadCast.putInt("playerid", player.playerid);
|
|
paramBroadCast.putInt("active_card", active_card);
|
|
paramBroadCast.putInt("card", card);
|
|
paramBroadCast.putInt("type", type);
|
|
paramBroadCast.putInt("from_seat", from_seat);
|
|
int huxi = player.getShowHuXi(true);
|
|
paramBroadCast.putInt("hu_xi", huxi);
|
|
if (opcardArray != null) {
|
|
paramBroadCast.putTArray("opcard", opcardArray);
|
|
}
|
|
Jedis jedis = Redis.use("group1_db5").getJedis();
|
|
String fp = jedis.hget("pao"+player.room+player.room.round+player.playerid,"fanpao");
|
|
jedis.close();
|
|
|
|
if (fp!=null){
|
|
//锁
|
|
logger.info("jefe fanpao into:" + player.room+",playerid:"+player.playerid );
|
|
//player.sendEvent(Config.GAME_EVT_DISCARD_TIP, null);
|
|
//player.room.broadCastToServer(player.playerid, EXActionEvent.EVENT_DEAL, null);
|
|
EXRoom room = player.getRoom();
|
|
room.getPlayBack().addActionCommand(player.seat, type, active_card, card, from_seat, huxi, opcardArray);
|
|
player.sendEvent(Config.GAME_EVT_ACTION, paramBroadCast);
|
|
ITObject otherBroadCast = new TObject();
|
|
Utils.objectCopyDeep(paramBroadCast, otherBroadCast);
|
|
otherBroadCast.putInt("hu_xi", player.getShowHuXi(false));
|
|
room.broadCastToClient(player.playerid, Config.GAME_EVT_ACTION, otherBroadCast);
|
|
}else{
|
|
EXRoom room = player.getRoom();
|
|
room.getPlayBack().addActionCommand(player.seat, type, active_card, card, from_seat, huxi, opcardArray);
|
|
player.sendEvent(Config.GAME_EVT_ACTION, paramBroadCast);
|
|
ITObject otherBroadCast = new TObject();
|
|
Utils.objectCopyDeep(paramBroadCast, otherBroadCast);
|
|
otherBroadCast.putInt("hu_xi", player.getShowHuXi(false));
|
|
room.broadCastToClient(player.playerid, Config.GAME_EVT_ACTION, otherBroadCast);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public void dealCard(EXRoom owner) {
|
|
for (Entry<Integer, Player> entry : owner.playerMapById.entrySet()) {
|
|
EXPlayer player = (EXPlayer) entry.getValue();
|
|
player.cardInhand = owner.card.deal();
|
|
|
|
// if (2 == player.seat) {
|
|
// player.cardInhand.clear();
|
|
// String cardStr = "101, 102, 102, 103, 103, 109, 201, 201, 202, 202, 203, 203, 204, 204, 204, 206, 207, 208, 209, 210";
|
|
// String[] cards = cardStr.split(", ");
|
|
// for(String c : cards) {
|
|
// Integer card = Integer.valueOf(c);
|
|
// player.cardInhand.add(card);
|
|
// }
|
|
// }
|
|
// if (3 == player.seat) {
|
|
// player.cardInhand.clear();
|
|
// String cardStr = "101, 101, 201, 201, 202, 202, 203, 203, 103, 104, 105, 106, 204, 207, 207, 107, 208, 209, 110, 110";
|
|
// String[] cards = cardStr.split(", ");
|
|
// for(String c : cards) {
|
|
// Integer card = Integer.valueOf(c);
|
|
// player.cardInhand.add(card);
|
|
// }
|
|
// }
|
|
// if (1 == player.seat) {
|
|
// player.cardInhand.clear();
|
|
// String cardStr = "102, 103, 103, 104, 104, 104, 107, 107, 107, 108, 110, 201, 202, 204, 205, 205, 206, 206, 206, 209";
|
|
// String[] cards = cardStr.split(", ");
|
|
// for(String c : cards) {
|
|
// Integer card = Integer.valueOf(c);
|
|
// player.cardInhand.add(card);
|
|
// }
|
|
// }
|
|
|
|
Collections.sort(player.cardInhand);
|
|
|
|
ITObject param = new TObject();
|
|
ITArray handCard = Util.toTArray(player.cardInhand);
|
|
param.putTArray("card_list", handCard);
|
|
param.putInt("bank_seat", player.room.bankerSeat);
|
|
player.sendEvent(Config.GAME_EVT_PLAYER_DEAL, param);
|
|
|
|
player.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
|
|
|
logger.info("roomId:" + owner.roomid + ",round:" + owner.round + ",player:" + player + ",cardInhand:" + player.cardInhand);
|
|
}
|
|
// owner.card.cardList.clear();
|
|
// String cardStr = "210, 105, 101, 209, 106, 203, 109, 109, 204, 109, 108, 207, 110, 103, 203, 201, 107, 106, 110, 201, 210, 208, 101, 201, 105, 210, 205, 102, 108, 208, 105, 108, 102, 207, 202, 103, 106, 210, 202, 209";
|
|
// String[] cards = cardStr.split(", ");
|
|
// for(String c : cards) {
|
|
// Integer card = Integer.valueOf(c);
|
|
// owner.card.cardList.add(card);
|
|
// }
|
|
logger.info("roomId:" + owner.roomid + ",round:" + owner.round + ",cardList:" + owner.card.cardList);
|
|
}
|
|
|
|
public void tipEvent(EXPlayer owner) {
|
|
ITObject param = owner.tipMgr.toMP();
|
|
if (!owner.tipMgr.tipMap.isEmpty()) {
|
|
logger.info(param.toString());
|
|
|
|
Jedis jedis = Redis.use("group1_db5").getJedis();
|
|
String fp = jedis.hget("pao"+owner.room+owner.room.round+owner.playerid,"fanpao");
|
|
jedis.close();
|
|
logger.info("jefe tipEvent:" +param.getInt("uid"));
|
|
//ITObject params = new TObject();
|
|
//params.putInt("id",param.getInt("uid"));
|
|
|
|
if (fp!=null){
|
|
|
|
param.putInt("fptype",1);
|
|
owner.sendEvent(Config.GAME_EVT_FZTIPS, param);
|
|
}else{
|
|
owner.sendEvent(Config.GAME_EVT_FZTIPS, param);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void discardTipEvent(EXPlayer owner) {
|
|
owner.getRoom().currenDiscardSeat = owner.seat;
|
|
owner.sendEvent(Config.GAME_EVT_DISCARD_TIP, null);
|
|
}
|
|
|
|
public void winEvent(EXPlayer owner, int from_seat) {
|
|
ITArray cardInHand = TArray.newInstance();
|
|
for (int card1 : owner.cardInhand) {
|
|
cardInHand.addInt(card1);
|
|
}
|
|
ITObject param = new TObject();
|
|
param.putTArray("card", cardInHand);
|
|
param.putInt("seat", owner.seat);
|
|
param.putInt("from_seat", from_seat);
|
|
|
|
EXRoom room = owner.getRoom();
|
|
room.broadCastToClient(0, Config.GAME_EVT_HU, param);
|
|
room.getPlayBack().addWinCardCommand(owner.seat, false);
|
|
}
|
|
|
|
public ITObject getRoomResultData(EXRoom owner) {
|
|
ITObject mp = TObject.newInstance();
|
|
mp.putBoolean("liuju", owner.liuju);
|
|
mp.putInt("xipai_score", owner.xi_pai_score);
|
|
mp.putInt("active_player", owner.playerMapBySeat.get(owner.activeSeat).playerid);
|
|
mp.putTArray("left_card", Util.toTArray(owner.card.cardList));
|
|
mp.putTArray("throw_card", Util.toTArray(owner.throwCardsList));
|
|
long time = System.currentTimeMillis();
|
|
long t = time / 1000;
|
|
mp.putLong("time", t);
|
|
ITArray infoList = new TArray();
|
|
for (Entry<Integer, Player> entry : owner.playerMapById.entrySet()) {
|
|
EXPlayer player = (EXPlayer) entry.getValue();
|
|
ITObject param = new TObject();
|
|
param.putInt("seat", player.seat);
|
|
param.putInt("win_card", player.winCard);
|
|
param.putBoolean("is_win", player.winer == 1);
|
|
param.putInt("hu_xi", player.huXi);
|
|
param.putInt("tun", player.winScore);
|
|
player.hp_info(param);
|
|
if (owner.maxPlayers == 2) {
|
|
param.putInt("total_tun", player.score.round_score);
|
|
} else {
|
|
param.putInt("total_tun", player.score.round_score / 2);
|
|
}
|
|
|
|
param.putInt("round_score", player.score.round_score);
|
|
param.putInt("total_score", player.score.total_score);
|
|
|
|
ITArray mtList = TArray.newInstance();
|
|
for (MingTang mingTang : player.mingtangList) {
|
|
ITObject obj = TObject.newInstance();
|
|
obj.putInt("mingtang", mingTang.mingTang);
|
|
obj.putInt("type", mingTang.type);
|
|
obj.putInt("score", mingTang.score);
|
|
|
|
mtList.addTObject(obj);
|
|
}
|
|
param.putTArray("mingtang", mtList);
|
|
|
|
if (player.winer == 1) {
|
|
ITArray handCard = Util.toTArray(player.handCardEx);
|
|
param.putTArray("hand_card", handCard);
|
|
|
|
ITArray cardList = TArray.newInstance();
|
|
for (OpCard opCard : player.handCard) {
|
|
ITObject obj = TObject.newInstance();
|
|
obj.putInt("type", opCard.type);
|
|
obj.putInt("hu_xi", opCard.huXi);
|
|
obj.putInt("card1", opCard.card1);
|
|
obj.putInt("card2", opCard.card2);
|
|
obj.putInt("card3", opCard.card3);
|
|
|
|
cardList.addTObject(obj);
|
|
}
|
|
param.putTArray("cardList", cardList);
|
|
} else {
|
|
ITArray handCard = Util.toTArray(player.cardInhand);
|
|
param.putTArray("hand_card", handCard);
|
|
}
|
|
|
|
ITArray opCardList = TArray.newInstance();
|
|
for (OpCard opCard : player.opCardList) {
|
|
ITObject obj = TObject.newInstance();
|
|
obj.putInt("type", opCard.type);
|
|
obj.putInt("hu_xi", opCard.huXi);
|
|
obj.putInt("card1", opCard.card1);
|
|
obj.putInt("card2", opCard.card2);
|
|
obj.putInt("card3", opCard.card3);
|
|
|
|
opCardList.addTObject(obj);
|
|
}
|
|
param.putTArray("opCardList", opCardList);
|
|
|
|
infoList.addTObject(param);
|
|
}
|
|
mp.putTArray("info_list", infoList);
|
|
return mp;
|
|
}
|
|
|
|
public void roomResult(EXRoom owner) {
|
|
ITObject mp = TObject.newInstance();
|
|
mp.putInt("type", 0);
|
|
ITObject result = getRoomResultData(owner);
|
|
mp.putTObject("result", result);
|
|
owner.broadCastToClient(0, Config.GAME_EVT_RESULT1, mp);
|
|
}
|
|
|
|
public void roomTotalResult(EXRoom owner, boolean dissmiss) {
|
|
ITObject data = TObject.newInstance();
|
|
long t = System.currentTimeMillis() / 1000;
|
|
data.putLong("time", t);
|
|
ITArray infoList = new TArray();
|
|
for (Entry<Integer, Player> entry : owner.playerMapById.entrySet()) {
|
|
EXPlayer player = (EXPlayer) entry.getValue();
|
|
ITObject param = new TObject();
|
|
param.putInt("seat", player.seat);
|
|
param.putInt("total_huxi", player.total_huxi);
|
|
param.putInt("win_count", player.winCount);
|
|
param.putInt("total_score", player.score.total_score);
|
|
player.hp_info(param);
|
|
infoList.addTObject(param);
|
|
}
|
|
data.putTArray("info_list", infoList);
|
|
|
|
ITObject mp = TObject.newInstance();
|
|
mp.putInt("type", dissmiss ? 2 : 1);
|
|
if (!dissmiss) {
|
|
ITObject result = getRoomResultData(owner);
|
|
mp.putTObject("result", result);
|
|
}
|
|
mp.putTObject("total_result", data);
|
|
|
|
owner.broadCastToClient(0, Config.GAME_EVT_RESULT1, mp);
|
|
}
|
|
}
|