def GetHelper(self, msg): helper_conf = GameRule.helper_conf fb_friend_factor = helper_conf.get("facebook_friend_factor") favorite_factor = helper_conf.get("favorite_factor") friend_factor = helper_conf.get("friend_factor") helper_num = helper_conf.get("total_num") player_id = self.parent.pid friend = Friend(player_id=player_id) friends = set(friend.get_friend_list()) favorites = set(friend.get_favorite_list()) fb_friends = set(friend.get_facebook_list()) active_players = set(get_latest_login_players()) normal_p = active_players - friends - fb_friends - set([player_id]) favorites = favorites - fb_friends normal_f = friends - favorites - fb_friends # TODO - Design: filter normal_p players = (list(fb_friends) * fb_friend_factor + list(favorites) * favorite_factor + list(normal_f) * friend_factor + list(normal_p)) _players = set(players) if len(_players) <= helper_num: helper_ids = _players else: helper_ids = set() while len(helper_ids) < helper_num: _ids = random.sample(players, helper_num - len(helper_ids)) helper_ids.update(_ids) rep = GetHelperRep() helpers = [] for pid in helper_ids: h = Helper() player = Player(id=pid).load() player.set_info(h.player_info, simple_mode=True) h.creature.CopyFrom(player.get_help_creature().to_proto_class()) helpers.append(h) rep.helpers.extend(helpers) rep.result_code = GetHelperResultCode.Value("GET_HELPER_SUCCESS") return self.resp(rep)
def generate_proto(self, player_id): friend = FriendInfo() player = Player(id=player_id).load() player.set_info(friend.player_info, simple_mode=True) friend.is_favorite = player_id in self.get_favorite_list() return friend