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
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
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))
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
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!!"
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
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
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
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
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
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
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
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
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
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