Ejemplo n.º 1
0
def join_guild_802(data, player):
    """加入公会 """
    p_id = player.base_info.id
    args = JoinGuildRequest()
    args.ParseFromString(data)
    response = JoinGuildResponse()
    g_id = args.g_id
    m_g_id = player.guild.g_id
    m_exit_time = player.guild.exit_time
    the_time = int(time.time()) - m_exit_time

    if m_exit_time != 1 and the_time < base_config.get('exit_time'):
        response.result = False
        response.message = "退出公会半小时内不可加入公会"
        response.spare_time = base_config.get('exit_time') - the_time
        return response.SerializeToString()

    if m_g_id != 0:
        response.result = False
        response.message = "您已加入公会"
        return response.SerializeToString()

    data1 = tb_guild_info.getObjData(g_id)

    if not data1:
        response.result = False
        response.message = "公会ID错误"
        return response.SerializeToString()

    guild_obj = Guild()
    guild_obj.init_data(data1)

    if guild_obj.get_p_num() >= guild_config.get(guild_obj.level).p_max:
        response.result = False
        response.message = "公会已满员"
        return response.SerializeToString()
    else:
        guild_obj.join_guild(p_id)
        guild_obj.save_data()

    response.result = True
    return response.SerializeToString()
Ejemplo n.º 2
0
def deal_apply_805(data, player):
    """处理加入公会申请 """
    args = DealApplyRequest()
    args.ParseFromString(data)
    response = DealApplyResponse()

    res_type = args.res_type
    m_g_id = player.guild.g_id
    data1 = tb_guild_info.getObjData(m_g_id)
    if not data1 or m_g_id == 0:
        response.result = False
        response.message = "公会ID错误"
        return response.SerializeToString()

    guild_obj = Guild()
    guild_obj.init_data(data1)
    if res_type == 1:
        p_ids = args.p_ids

        if guild_obj.get_p_num() + len(p_ids) > guild_config.get(
                guild_obj.level).p_max:
            response.result = False
            response.message = "超出公会人数上限"
            return response.SerializeToString()

        for p_id in p_ids:
            character_guild = tb_character_guild.getObjData(p_id)
            info = character_guild.get("info")
            if info.get("g_id") != 0:
                if guild_obj.apply.count(p_id) == 1:
                    guild_obj.apply.remove(p_id)
                    response.p_ids.append(p_id)
                continue
            # 加入公会聊天室
            invitee_player = PlayersManager().get_player_by_id(p_id)
            if invitee_player:  # 在线
                remote_gate.login_guild_chat_remote(invitee_player.dynamic_id,
                                                    invitee_player.guild.g_id)
                invitee_player.guild.g_id = player.guild.g_id
                invitee_player.guild.position = 5
                invitee_player.guild.contribution = 0
                invitee_player.guild.all_contribution = 0
                invitee_player.guild.k_num = 0
                invitee_player.guild.worship = 0
                invitee_player.guild.worship_time = 1
                invitee_player.guild.exit_time = 1
                invitee_player.guild.save_data()
            else:
                data = {
                    'info': {
                        'g_id': player.guild.g_id,
                        'position': 5,
                        'contribution': 0,
                        'all_contribution': 0,
                        'k_num': 0,
                        'worship': 0,
                        'worship_time': 1,
                        'exit_time': 1
                    }
                }
                p_guild_data = tb_character_guild.getObj(p_id)
                p_guild_data.update_multi(data)
            if guild_obj.apply.count(p_id) == 1:
                guild_obj.apply.remove(p_id)
                if guild_obj.p_list.get(5):
                    p_list1 = guild_obj.p_list.get(5)
                    p_list1.append(p_id)
                    guild_obj.p_list.update({5: p_list1})
                else:
                    guild_obj.p_list.update({5: [p_id]})
                guild_obj.p_num += 1

    elif res_type == 2:
        p_ids = args.p_ids
        for p_id in p_ids:
            if guild_obj.apply.count(p_id) == 1:
                guild_obj.apply.remove(p_id)

    else:  # res_type == 3
        guild_obj.apply = []

    guild_obj.save_data()
    response.result = True
    response.message = "处理成功"
    return response.SerializeToString()
Ejemplo n.º 3
0
def exit_guild_803(data, player):
    """退出公会 """
    p_id = player.base_info.id
    dynamicid = player.dynamic_id
    response = GuildCommonResponse()
    m_g_id = player.guild.g_id
    data1 = tb_guild_info.getObjData(m_g_id)

    if m_g_id == 0:
        response.result = False
        response.message = "您还未加入公会"
        return response.SerializeToString()

    if not data1:
        response.result = False
        response.message = "公会ID错误"
        return response.SerializeToString()

    guild_obj = Guild()
    guild_obj.init_data(data1)
    if guild_obj.get_p_num() == 1:

        # 解散公会
        # 删除公会名字
        guild_name_data = tb_guild_name.getObjData(guild_obj.name)
        if guild_name_data:
            # guild_name_obj = tb_guild_name.getObj(guild_obj.name)
            # guild_name_obj.delete()
            tb_guild_name.deleteMode(guild_obj.name)

        # 解散公会,删除公会聊天室
        remote_gate.del_guild_room_remote(player.guild.g_id)

        player.guild.g_id = 0
        player.guild.exit_time = int(time.time())
        player.guild.save_data()
        guild_obj.delete_guild()
        response.result = True
        response.message = "公会已解散"
        return response.SerializeToString()

    position = player.guild.position
    p_list = guild_obj.p_list
    position_p = p_list.get(position)

    if position_p.count(p_id) == 1:
        if position == 1:
            # 转让公会,并自己退出
            p_list = guild_obj.p_list
            guildinfolist = {}
            for num in range(2, 6):
                p_list1 = p_list.get(num)
                if p_list1:
                    for p_id1 in p_list1:
                        guildinfo = tb_character_guild.getObjData(p_id1)
                        if guildinfo:
                            guildinfolist.update(
                                {guildinfo.get('id'): guildinfo.get('info')})
            new_list = sorted(
                guildinfolist.items(),
                key=lambda x:
                (-1 * x[1]['position'], x[1]['contribution'], x[1]['k_num']),
                reverse=True)
            tihuan_id = new_list[0][0]
            tihuan_position = new_list[0][1].get('position')

            character_guild = tb_character_guild.getObjData(tihuan_id)
            info = character_guild.get("info")
            if info.get("g_id") != player.guild.g_id:
                response.result = False
                response.message = "此玩家不在公会"
                return response.SerializeToString()

            invitee_player = PlayersManager().get_player_by_id(tihuan_id)
            if invitee_player:  # 在线
                remote_gate.logout_guild_chat_remote(invitee_player.dynamic_id)
                invitee_player.guild.position = 1
                invitee_player.guild.save_data()
            else:
                data = {
                    'info': {
                        'g_id': info.get("g_id"),
                        'position': 1,
                        'contribution': info.get("contribution"),
                        'all_contribution': info.get("all_contribution"),
                        'k_num': info.get("k_num"),
                        'worship': info.get("worship"),
                        'worship_time': info.get("worship_time"),
                        'exit_time': info.get("exit_time")
                    }
                }
                p_guild_data = tb_character_guild.getObj(tihuan_id)
                p_guild_data.update_multi(data)

            # if not push_message(1801, tihuan_id):
            #     response.result = False
            #     response.message = '系统错误'
            #     return response.SerializePartialToString()  # fail

            p_list1 = p_list.get(tihuan_position)
            p_list1.remove(tihuan_id)

            player.guild.g_id = 0
            player.guild.exit_time = int(time.time())
            player.guild.save_data()

            guild_obj.p_list.update({1: [tihuan_id], tihuan_position: p_list1})
            guild_obj.p_num -= 1
            guild_obj.save_data()

            # 退出公会聊天
            remote_gate.logout_guild_chat_remote(dynamicid)

            response.result = True
            response.message = "公会已转让,自己退出公会"
            return response.SerializeToString()
        player.guild.g_id = 0
        player.guild.exit_time = int(time.time())
        player.guild.save_data()
        guild_obj.exit_guild(p_id, position)
        guild_obj.save_data()
        # 退出公会聊天
        remote_gate.logout_guild_chat_remote(dynamicid)
        response.result = True
        return response.SerializeToString()
    response.result = False
    response.message = "您不在此公会"
    return response.SerializeToString()