Example #1
0
    def set_user_point(self, change_num):
        self.point += change_num
        ret, info = MUser.update_user_point(self.user_id, change_num)

        if self.point != info.get("point", ""):
            logger.error("set_user_point error! ({0}, {1})".format(self.user_id, change_num))
        return self.point
Example #2
0
    def param_check(self, **kwargs):  # 参数验证
        act_params = kwargs.get("act_params")
        if 1 != len(act_params):
            # 同时只允许有一个玩家发生点杠操作
            logger.debug(u"act_diangang_error:%s", str(act_params))
            return

        seat_id = act_params.keys()[0]
        params = act_params[seat_id]

        card_val = self.game_data.last_chu_card_val

        if not card_val or -1 == self.game_data.last_chu_card_seat_id:
            logger.error("dian_gang params error: %s", str([seat_id, params]))
            return

        hand_card = self.players[seat_id].hand_card
        if 3 != hand_card.hand_card_info[Card.cal_card_type(card_val)][
                Card.cal_card_digit(card_val)]:
            logger.error("dian_gang params error: %s", str([seat_id, params]))
            return

        self.seat_id = seat_id
        self.hand_card = self.game_data.players[seat_id].hand_card
        return 1
Example #3
0
 def notify_player(self, seat_id, command_id, data, code=200):
     """
     通知单个玩家
     :param seat_id:
     :param command_id:
     :param data:
     :return:
     """
     if self.users[seat_id]:
         push_msg(command_id, data, [self.users[seat_id].session_id], code)
     else:
         logger.error("room_desk->notify_player-> self.user[%s] = None"%str(seat_id))
Example #4
0
 def execute(self, act_params={}):
     """
     执行补杠
     :param act_params:
     :return:
     """
     logger.debug(u"补杠: %s", str(act_params))
     for step in self.game_config.player_act_step.get(Act.BU_GANG):
         for name, cfg in step.items():
             ret = self.step_handlers.get(name)(act_params=act_params, config_params=cfg)
             if not ret:
                 logger.error("step:%s", step)
                 return
     return 1
Example #5
0
def notify_web_server_restart():
    url = "http://127.0.0.1:8889/mj/restart_delete_room_info"
    params = {}
    r = requests.get(url, params)
    if r.status_code != 200:
        logger.error("web server left_room error paras = %s" % params)
        print "delete error!!"
        return
    data = json.loads(r.text)
    if data.get("ret"):
        raise Exception("web server left_room error ret = %s" %
                        data.get("ret"))

    print "delete success!!"
Example #6
0
 def execute(self, act_params={}):
     """
     执行吃牌
     :param act_params:
     :return:
     """
     logger.debug(u"吃牌: %s", str(act_params))
     print "CHI EXECUTE self.game_config.player_act_step=", self.game_config.player_act_step
     print "CHI_step=", self.game_config.player_act_step.get(Act.CHI)
     for step in self.game_config.player_act_step.get(Act.CHI):
         for name, cfg in step.items():
             ret = self.step_handlers.get(name)(act_params=act_params,
                                                config_params=cfg)
             if not ret:
                 logger.error("step:%s", step)
                 return
     return 1
Example #7
0
    def param_check(self, seat_id, params, config_params):  # 参数验证
        hook_seat_id = params.get("hook_seat_id", -1)

        if not self.game_data.last_chu_card_val:
            logger.error("dian_hu params error: %s", str([seat_id, params]))
            return

        hand_card_vals = self.players[seat_id].hand_card.hand_card_vals
        # if 1 != len(hand_card_vals) % 3 or not self.players[seat_id].can_hu_result:
        if 1 != len(hand_card_vals) % 3:
            logger.error("dian_hu params error: %s", str([seat_id, params]))
            return

        self.seat_id = seat_id
        self.hook_seat_id = hook_seat_id
        self.hand_card = self.game_data.players[seat_id].hand_card
        self.dian_hu_card = self.game_data.last_chu_card_val
        return 1
Example #8
0
    def param_check(self, **kwargs):  # 参数验证
        act_params = kwargs.get("act_params")
        if 1 != len(act_params):
            # 同时只允许有一个玩家发生自摸操作
            logger.debug(u"act_zimo_error:%s", str(act_params))
            return

        seat_id = act_params.keys()[0]
        params = act_params[seat_id]

        hand_card_vals = self.players[seat_id].hand_card.hand_card_vals
        # if 2 != len(hand_card_vals) % 3 or not self.players[seat_id].can_hu_result:
        if 2 != len(hand_card_vals) % 3:
            logger.error("dian_hu params error: %s", str([seat_id, params]))
            return

        self.seat_id = seat_id
        self.hand_card = self.players[seat_id].hand_card
        return 1
Example #9
0
    def param_check(self, **kwargs):  # 参数验证
        act_params = kwargs.get("act_params")
        if 1 != len(act_params):
            # 同时只允许有一个玩家发生吃牌操作
            logger.debug(u"act_ting_error:%s", str(act_params))
            return

        seat_id = act_params.keys()[0]
        params = act_params[seat_id]

        chu_card = params.get("chu_card")
        if 0 > seat_id or seat_id >= self.max_player_num or chu_card not in self.players[
                seat_id].can_ting_info.keys():
            logger.error("ting params error: %s", str([seat_id, params]))
            return

        self.chu_card_val = chu_card
        self.seat_id = seat_id
        return 1
Example #10
0
    def execute(self, act_params={}):
        """
        执行自摸
        :param act_params:
        :return:
        """
        logger.debug(u"自摸胡牌: %s", str(act_params))
        for step in self.game_config.player_act_step.get(Act.ZI_MO):
            for name, cfg in step.items():
                ret = self.step_handlers.get(name)(act_params=act_params,
                                                   config_params=cfg)
                if not ret:
                    logger.error("step:%s", step)
                    return

        self.settle(settle_type_list=[SettleType.HU])
        if self.game_config.is_hu_end:
            # 当回合胡牌后结束当局游戏
            self.end_game()
        return 1
Example #11
0
def process_login(user_id, passwd, session_id, data):
    """
    登录消息特殊处理, 包括踢之前用户下线
    :param user_id:
    :param session_id:
    :param data:
    :return:
    """
    login_result = route_ins.login(user_id=user_id, passwd=passwd, new_sessionid=session_id, data=data)
    print "login_result:", login_result
    if 200 == login_result.get('code'):
        info = login_result.get("info")
        old_session = info.get("old_session")
        if old_session and session_id != old_session:
            # 踢掉之前用户
            node_name, id = info.get("old_session").split(',')
            data = error_response(USER_LOGIN_OTHER_DEVICE)
            GlobalObject().root.callChildByName(node_name, "push_object", PUSH_USER_OTHER_LOGIN, data, [id])
        return login_result
    else:
        logger.error("process_login: unknown error:%s", str(login_result))
        return login_result
Example #12
0
    def execute(self):
        """
        定庄
        :return:
        """
        logger.debug(u"定庄: %s", str([]))
        dice = []
        if -1 == self.game_data.banker_seat_id:
            # 初始时
            dice = self.get_random_dice()
            self.game_data.banker_seat_id = (dice[0]+dice[1]-1) % self.max_player_num
        else:
            if not self.game_data.hu_player_static:
                # 上局为流局/荒庄, 则随机定庄
                dice = self.get_random_dice()
                self.game_data.banker_seat_id = (dice[0] + dice[1] - 1) % self.max_player_num
            else:
                source = -1
                for seat_id, params in self.game_data.hu_player_static.items():
                    self.game_data.banker_seat_id = seat_id
                    source = params.get("source", -1)
                if 1 < len(self.game_data.hu_player_static):
                    # 一炮多响, 点炮的人做庄
                    if -1 == source:
                        logger.error("gen_banker error: %s", str(self.game_data.hu_player_static))
                        raise Exception()
                    self.game_data.banker_seat_id = source
        # 重置胡牌相关信息
        self.game_data.reset_hu_static()

        notify_all_desk_player(self.desk_id, messageids.PUSH_GEN_BANK,
                               data={"bank_seat_id": self.game_data.banker_seat_id, "dice": dice})
        # 清理上一局信息
        self.game_data.reset_game_data()
        # 洗牌
        self.card_dealer.shuffle_card()
        # 将庄家位置存入game_data
        self.game_data.last_chu_card_seat_id = self.game_data.banker_seat_id
Example #13
0
    def param_check(self, **kwargs):      # 参数验证
        act_params = kwargs.get("act_params")
        # if 1 != len(act_params):
        #     # 同时只允许有一个玩家发生补杠牌操作
        #     logger.debug(u"act_bugang_error:%s", str(act_params))
        #     return

        seat_id = act_params.keys()[0]
        params = act_params[seat_id]
        # TODO 此处需要接受参数 用户选择暗杠牌值
        used_card = params.get("used_card")[0]

        if not used_card:
            logger.error("bu_gang card_val is none error: %s", str([self.seat_id, params]))
            return

        hand_card = self.players[seat_id].hand_card
        if 1 != used_card and [used_card, used_card, used_card] not in hand_card.peng_card_vals:
            logger.error("bu_gang card_val not in peng_card_val error: %s", str([self.seat_id, params]))
            return

        self.bugang_cardval = used_card
        self.seat_id = seat_id
        return 1
Example #14
0
 def execute(self, act_params={}):
     """
     执行点炮胡牌
     :param act_params:
     :return:
     """
     logger.debug(u"点炮胡牌: %s", str(act_params))
     for seat_id, params in act_params.items():
         for step in self.game_config.player_act_step.get(Act.DIAN_HU):
             for name, cfg in step.items():
                 ret = self.step_handlers.get(name)(seat_id=seat_id,
                                                    params=params,
                                                    config_params=cfg)
                 if not ret:
                     logger.error("step:%s", step)
                     return
         if not self.game_config.has_tong_pao:
             # 如果不能通炮胡,则只取第一个胡牌的玩家
             break
     self.settle(settle_type_list=[SettleType.HU])
     if self.game_config.is_hu_end:
         # 当回合胡牌后结束当局游戏
         self.end_game()
     return 1
Example #15
0
    def param_check(self, **kwargs):  # 参数验证
        act_params = kwargs.get("act_params")
        if 1 != len(act_params):
            # 同时只允许有一个玩家发生吃牌操作
            logger.debug(u"act_chi_error:%s", str(act_params))
            return

        seat_id = act_params.keys()[0]
        params = act_params[seat_id]

        card_val = self.game_data.last_chu_card_val
        used_cards = params.get("used_card", [])
        # 接受三张牌,用户吃的牌, 出去被吃的牌做处理
        if card_val not in used_cards:
            logger.error("chi card val not in used_cards params error: %s",
                         str([seat_id, params]))
            return
        used_cards.remove(card_val)
        if not card_val or 2 != len(used_cards):
            logger.error("chi params error: %s", str([seat_id, params]))
            return

        hand_card_vals = self.players[seat_id].hand_card.hand_card_vals
        if used_cards[0] not in hand_card_vals or used_cards[
                1] not in hand_card_vals:
            logger.error("chi params error: %s", str([seat_id, params]))
            return

        cards = [card_val, used_cards[0], used_cards[1]]
        cards.sort()
        if not self.card_analyse.shun(cards):
            logger.error("chi params error: %s", str([seat_id, params]))
            return

        self.used_cards = used_cards
        self.chi_group = cards
        self.seat_id = seat_id
        return 1