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()
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()
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()