Пример #1
0
def send_escort_task_invite_remote(guild_id, task_id, player_guild_id, rob_no,
                                   protect_or_rob):
    """
    发送邀请到玩家所在公会
    """
    guild = guild_manager_obj.get_guild_obj(player_guild_id)
    task_guild = guild_manager_obj.get_guild_obj(guild_id)
    task = task_guild.get_task_by_id(task_id)
    if protect_or_rob == 1:
        guild.escort_tasks_invite_protect[task_id] = {
            "guild_id": guild_id,
            "rob_no": rob_no
        }
        task.last_send_invite_time = int(get_current_timestamp())

    elif protect_or_rob == 2:
        guild.escort_tasks_invite_rob[task_id] = {
            "guild_id": guild_id,
            "rob_no": rob_no
        }
        task.rob_task_infos[rob_no]["last_send_invite_time"] = int(
            get_current_timestamp())
    guild.save_data()

    task_guild = guild_manager_obj.get_guild_obj(guild_id)
    return construct_task_data(task_guild.get_task_by_id(task_id), rob_no)
Пример #2
0
def start_rob_escort_remote(guild_id, task_id, rob_no, player_id):

    guild = guild_manager_obj.get_guild_obj(guild_id)
    task = guild.get_task_by_id(task_id)
    # get robbed success num
    robbed_num = task.rob_success_times()


    if task.rob_success_times() >= 2:
        # 接受劫运任务,如果该任务已经达到最大劫运次数
        return {'result': False, 'result_no': 190803}
    if task.has_robbed(player_id):
        # 已经被劫了
        return {"result": False, "result_no": 190804}
    # construct battle units
    # update rob task
    task_item = game_configs.guild_task_config.get(task.task_no)
    logger.debug("task rob task infos %s %s" % (task.rob_task_infos, len(task.rob_task_infos)))
    rob_task_info = task.rob_task_infos[rob_no]
    seed1, seed2 = get_seeds()
    rob_task_info["seed1"] = seed1
    rob_task_info["seed2"] = seed2
    red_groups = []
    blue_groups = []
    for player_info in task.protecters:
        blue_group = cPickle.loads(player_info.get("BattleUnitGrop"))
        blue_groups.append(blue_group)

    for player_info in rob_task_info.get("robbers"):
        red_group = cPickle.loads(player_info.get("BattleUnitGrop"))
        red_groups.append(red_group)
    logger.debug("blue_groups %s" % blue_groups)
    logger.debug("red_groups %s" % red_groups)

    # pvp battle
    rob_result = guild_pvp_start(red_groups, blue_groups, seed1, seed2)

    rob_task_info["rob_result"] = rob_result
    rob_task_info["rob_time"] = int(get_current_timestamp())
    if rob_result:
        robbers_num = len(rob_task_info.get("robbers"))
        peoplePercentage = task_item.peoplePercentage.get(robbers_num)
        robbedPercentage = task_item.robbedPercentage.get(robbed_num+1)
        robber_guild = guild_manager_obj.get_guild_obj(rob_task_info.get("rob_guild_info").get("id"))
        mail_arg1 = calculate_reward(peoplePercentage, robbedPercentage, "SnatchReward", task_item, robber_guild)
        if robbed_num + 1 >= 2:
            if task_id in guild.escort_tasks_can_rob:
                guild.escort_tasks_can_rob.remove(task_id)
                guild.save_data()

        rob_task_info["rob_reward"] = mail_arg1
        for player_info in rob_task_info.get("robbers"):
            send_mail(conf_id=1002,  receive_id=player_info.get("id"), prize=str(get_reward(mail_arg1, robber_guild)))
    rob_task_info["rob_state"] = -1
    task.update_reward(task_item)
    task.save_data()
    res = {"result": True, "protecters": task.protecters, "rob_task_info": rob_task_info, "task": construct_task_data(task, rob_no)}
    logger.debug("res %s" % res)
    return res
Пример #3
0
def guild_boss_battle_remote(guild_id, str_red_units, red_unpar_data, seed1, seed2):
    """开始战斗
    """
    logger.debug("hjqy_battle_remote======")
    guild = guild_manager_obj.get_guild_obj(guild_id)
    boss = guild.guild_boss
    red_units = cPickle.loads(str_red_units)
    blue_units = boss.blue_units
    logger.debug("blue unit length %s" % len(blue_units))

    origin_hp = boss.hp
    fight_result = guild_boss_start(red_units,  blue_units, red_unpar_data, {}, seed1, seed2)

    logger.debug("blue unit length %s" % len(blue_units))
    boss.blue_units = blue_units

    current_damage_hp = origin_hp - boss.hp
    logger.debug("origin_hp %s, current_hp %s, current_damage_hp %s" % (origin_hp, boss.hp, current_damage_hp))

    guild_skill_point = 0
    if fight_result:
        stage_item = game_configs.special_stage_config.get("guild_boss_stages").get(boss.stage_id)
        guild.skill_point += stage_item.Animal_Kill_Over
        guild_skill_point = stage_item.Animal_Kill_Over
        boss.reset()
        guild.save_data()

    logger.debug("guildboss_battle_remote over===================")
    guild.save_data()
    return dict(
            result=True,
            fight_result = fight_result,
            guild_skill_point = guild_skill_point,
            )
Пример #4
0
def praise_remote(g_id, p_id, name, this_times):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    build_level = guild_obj.build.get(1)
    build_conf = game_configs.guild_config.get(1)[build_level]

    headSworShip = build_conf.headSworShip
    worShip = build_conf.worShip
    money_num = random.randint(headSworShip[0], headSworShip[1])
    drop_num = random.randint(worShip[this_times][0], worShip[this_times][1])
    guild_obj.add_praise_money(money_num)

    dynamic_pb = guild_pb2.GuildDynamic()
    dynamic_pb.type = const.DYNAMIC_ZAN
    dynamic_pb.time = int(time.time())
    dynamic_pb.name1 = name
    dynamic_pb.num1 = drop_num

    guild_obj.add_dynamic(dynamic_pb.SerializeToString())
    guild_obj.save_data()
    return {
        'res': True,
        'build_level': build_level,
        'money_num': guild_obj.praise_money,
        'praise_times': guild_obj.praise_num,
        'drop_num': drop_num
    }
Пример #5
0
def guild_boss_init_remote(guild_id):
    """
    初始化信息
    """
    guild = guild_manager_obj.get_guild_obj(guild_id)

    if not guild:
        return {'result': False, 'result_no': 844}

    guild.guild_boss.check_time()
    guild.save_data()

    # 重置召唤次数
    guild.reset_guild_boss_trigger_times()

    res = dict(
            result=True,
            guild_skills=guild.guild_skills,
            guild_boss_trigger_times=guild.guild_boss_trigger_times,
            guild_boss=guild.guild_boss.property_dict(),
            build = guild.build,
            )

    logger.debug("result %s" % res)
    return res
Пример #6
0
def captailn_receive_remote(g_id, p_id):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}
    position = guild_obj.get_position(p_id)
    if position != 1:
        # 没有权限 或者 不在此军团
        return {'res': False, 'no': 800}

    build_level = guild_obj.build.get(1)
    build_conf = game_configs.guild_config.get(1)[build_level]

    money_num = guild_obj.praise_money
    if guild_obj.praise_money <= 0:
        return {'res': False, 'no': 800}

    guild_obj.receive_praise_money()
    guild_obj.save_data()
    return {
        'res': True,
        'build_level': build_level,
        'money_num': money_num,
        'praise_times': guild_obj.praise_num
    }
Пример #7
0
def deal_invite_guild_remote(g_id, p_id, res, name):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('join_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}
    if not guild_obj.invite_join.get(p_id):
        return {'res': False, 'no': 800}
    del guild_obj.invite_join[p_id]
    if res:
        p_max = game_configs.guild_config.get(1).get(
            guild_obj.build.get(1)).p_max
        if not guild_obj.invite_join.get(p_id) and guild_obj.p_num + 1 > p_max:
            return {'res': False, 'no': 845}
        p_list3 = guild_obj.p_list.get(3, [])
        if p_list3:
            p_list3.append(p_id)
        else:
            guild_obj.p_list[3] = [p_id]

        dynamic_pb = guild_pb2.GuildDynamic()
        dynamic_pb.type = const.DYNAMIC_JOIN
        dynamic_pb.time = int(time.time())
        dynamic_pb.name1 = name

        guild_obj.add_dynamic(dynamic_pb.SerializeToString())

    guild_obj.save_data()

    return {'res': True}
Пример #8
0
def guild_boss_init_remote(guild_id):
    """
    初始化信息
    """
    guild = guild_manager_obj.get_guild_obj(guild_id)

    if not guild:
        return {'result': False, 'result_no': 844}

    guild.guild_boss.check_time()
    guild.save_data()

    # 重置召唤次数
    guild.reset_guild_boss_trigger_times()

    res = dict(
        result=True,
        guild_skills=guild.guild_skills,
        guild_boss_trigger_times=guild.guild_boss_trigger_times,
        guild_boss=guild.guild_boss.property_dict(),
        build=guild.build,
    )

    logger.debug("result %s" % res)
    return res
Пример #9
0
def mine_seek_help_remote(u_id, mine_id, g_id):
    """
    求助
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    if not mine.guild_seek_help(mine_id, u_id):
        return {'res': False, 'no': 800}

    mine_help = guild_obj.mine_help
    now = int(time.time())

    a = 1
    while mine_help.get(now):
        if a > 2:
            return {'res': False, 'no': 800}
        now += 1
        a += 1

    guild_obj.mine_help[now] = [mine_id, u_id, 0]
    guild_obj.save_data()
    return {'res': True, 'p_list': guild_obj.p_list}
Пример #10
0
def mine_seek_help_list_remote(g_id, p_id):
    """
    获取列表
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}
    position = guild_obj.get_position(p_id)
    if not position:
        #  不在此军团
        return {'res': False, 'no': 800}

    p_ids = []
    for _, x in guild_obj.p_list.items():
        p_ids += x
    for _time, [mine_id, u_id, times] in guild_obj.mine_help.items():
        if u_id not in p_ids:
            del guild_obj.mine_help[_time]
            continue
        if not mine.check_guild_seek_help(mine_id, u_id):
            del guild_obj.mine_help[_time]
            continue

    return {
        'res': True,
        'mine_help_list': guild_obj.mine_help,
        'p_list': guild_obj.p_list
    }
Пример #11
0
def invite_join_guild_remote(g_id, p_id, target_id):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('join_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    position = guild_obj.get_position(p_id)
    if position > 2:
        # 没有权限
        return {'res': False, 'no': 849}
    now = int(time.time())
    for _p_id, i_time in guild_obj.invite_join.items():
        if i_time + game_configs.base_config.get('guildInviteTime') > now:
            del guild_obj.invite_join[_p_id]
    p_max = game_configs.guild_config.get(1).get(guild_obj.build.get(1)).p_max
    if not guild_obj.invite_join.get(
            target_id) and guild_obj.p_num + 1 > p_max:
        return {'res': False, 'no': 845}

    guild_obj.invite_join[target_id] = now
    guild_obj.save_data()

    return {
        'res': True,
        'name': guild_obj.name,
        'level': guild_obj.level,
        'p_num': guild_obj.p_num
    }
Пример #12
0
def deal_apply_remote(g_id, p_ids, deal_type):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if deal_type == 1:
        for p_id in p_ids:
            if p_id not in guild_obj.apply:
                continue

            guild_obj.apply.remove(p_id)
            if guild_obj.p_list.get(3):
                p_list1 = guild_obj.p_list.get(3)
                p_list1.append(p_id)
                # guild_obj.p_list.update({3: p_list1})
            else:
                # guild_obj.p_list.update({3: [p_id]})
                guild_obj.p_list[3] = [p_id]

            character_obj = tb_character_info.getObj(p_id)
            character_info = character_obj.hgetall()
            del_player_apply(p_id, character_info.get('apply_guilds', []))

            dynamic_pb = guild_pb2.GuildDynamic()
            dynamic_pb.type = const.DYNAMIC_JOIN
            dynamic_pb.time = int(time.time())
            dynamic_pb.name1 = character_info.get('nickname')
            guild_obj.add_dynamic(dynamic_pb.SerializeToString())
    if deal_type == 2:
        for p_id in p_ids:
            if p_id in guild_obj.apply:
                guild_obj.apply.remove(p_id)
    if deal_type == 3:
        guild_obj.apply = []
    guild_obj.save_data()
Пример #13
0
def del_player_apply(p_id, apply_guilds):
    for g_id in apply_guilds:
        guild_obj = guild_manager_obj.get_guild_obj(g_id)
        if not guild_obj:
            continue
        if p_id in guild_obj.apply:
            guild_obj.apply.remove(p_id)
            guild_obj.save_data()
Пример #14
0
def get_tasks_by_ids_remote(task_ids):
    tasks = {}
    for task_id, info in task_ids.items():
        guild = guild_manager_obj.get_guild_obj(info.get("guild_id"))
        if not guild: continue
        task = guild.get_task_by_id(task_id)
        if not task: continue
        tasks[task_id] = construct_task_data(task, info.get("rob_no", -1))
    return tasks
Пример #15
0
def start_protect_task_remote(guild_id, task_id):
    """
    开始保护押运任务
    """
    guild = guild_manager_obj.get_guild_obj(guild_id)
    task = guild.get_task_by_id(task_id)
    logger.debug("task state %s" % task.state)
    start_task(task, guild)
    return dict(result=True, task=construct_task_data(task))
Пример #16
0
def get_shop_data_remote(g_id, shop_type):
    """
    军团商店
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return None
    return guild_obj.get_shop_data(shop_type)
Пример #17
0
def get_tasks_by_ids_remote(task_ids):
    tasks = {}
    for task_id, info in task_ids.items():
        guild = guild_manager_obj.get_guild_obj(info.get("guild_id"))
        if not guild: continue
        task = guild.get_task_by_id(task_id)
        if not task: continue
        tasks[task_id] = construct_task_data(task, info.get("rob_no", -1))
    return tasks
Пример #18
0
def send_escort_task_invite_remote(guild_id, task_id, player_guild_id, rob_no, protect_or_rob):
    """
    发送邀请到玩家所在公会
    """
    guild = guild_manager_obj.get_guild_obj(player_guild_id)
    task_guild = guild_manager_obj.get_guild_obj(guild_id)
    task = task_guild.get_task_by_id(task_id)
    if protect_or_rob == 1:
        guild.escort_tasks_invite_protect[task_id] = {"guild_id" : guild_id, "rob_no": rob_no}
        task.last_send_invite_time = int(get_current_timestamp())

    elif protect_or_rob == 2:
        guild.escort_tasks_invite_rob[task_id] = {"guild_id" : guild_id, "rob_no": rob_no}
        task.rob_task_infos[rob_no]["last_send_invite_time"] = int(get_current_timestamp())
    guild.save_data()

    task_guild = guild_manager_obj.get_guild_obj(guild_id)
    return construct_task_data(task_guild.get_task_by_id(task_id), rob_no)
Пример #19
0
def start_protect_task_remote(guild_id, task_id):
    """
    开始保护押运任务
    """
    guild = guild_manager_obj.get_guild_obj(guild_id)
    task = guild.get_task_by_id(task_id)
    logger.debug("task state %s" % task.state)
    start_task(task, guild)
    return dict(result=True,
            task=construct_task_data(task))
Пример #20
0
def get_invite_remote(guild_id, protect_or_rob):
    """
    获取邀请
    """
    tasks = {}
    guild = guild_manager_obj.get_guild_obj(guild_id)
    if protect_or_rob == 1:
        for task_id, info in guild.escort_tasks_invite_protect.items():
            task = guild.get_task_by_id(task_id)
            tasks[task_id] = construct_task_data(task)
    if protect_or_rob == 2:
        for task_id, info in guild.escort_tasks_invite_rob.items():
            guild_id = info.get("guild_id")
            rob_no = info.get("rob_no")
            guild = guild_manager_obj.get_guild_obj(guild_id)
            task = guild.get_task_by_id(task_id)
            tasks[task_id] = construct_task_data(task, rob_no)

    return tasks
Пример #21
0
def get_invite_remote(guild_id, protect_or_rob):
    """
    获取邀请
    """
    tasks = {}
    guild = guild_manager_obj.get_guild_obj(guild_id)
    if protect_or_rob == 1:
        for task_id, info in guild.escort_tasks_invite_protect.items():
            task = guild.get_task_by_id(task_id)
            tasks[task_id] = construct_task_data(task)
    if protect_or_rob == 2:
        for task_id, info in guild.escort_tasks_invite_rob.items():
            guild_id = info.get("guild_id")
            rob_no = info.get("rob_no")
            guild = guild_manager_obj.get_guild_obj(guild_id)
            task = guild.get_task_by_id(task_id)
            tasks[task_id] = construct_task_data(task, rob_no)

    return tasks
Пример #22
0
def exit_guild_remote(guild_id, p_id, name):
    """
    no: True 1 解散公会 2 团长退出 3 非团长退出
    """
    guild_obj = guild_manager_obj.get_guild_obj(guild_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}
    position = guild_obj.get_position(p_id)
    if not position:
        # "您不在此公会"
        return {'res': False, 'no': 850}
    p_num = guild_obj.p_num
    if p_num == 1:
        # 删名字
        guild_name_data = tb_guild_info.getObj('names')
        if guild_name_data.hget(guild_obj.name):
            guild_name_data.hdel(guild_obj.name)
        # 删军团
        guild_manager_obj.delete_guild(guild_obj.g_id)
        return {
            'res': True,
            'no': 1,
            'apply_ids': guild_obj.apply,
            'guild_name': guild_obj.name
        }
    if position == 1:
        p_list = []
        next_position = 0
        no = 2
        if guild_obj.p_list.get(2):
            next_position = 2
            p_list = guild_obj.p_list.get(2)
        else:
            next_position = 3
            p_list = guild_obj.p_list.get(3)
        next_id = get_next_captain(p_list)
        guild_obj.change_position(next_id, next_position, position)
    else:
        no = 3
    guild_obj.exit_guild(p_id, position)

    dynamic_pb = guild_pb2.GuildDynamic()
    dynamic_pb.type = const.DYNAMIC_EXIT
    dynamic_pb.time = int(time.time())
    dynamic_pb.name1 = name
    guild_obj.add_dynamic(dynamic_pb.SerializeToString())

    guild_obj.save_data()
    return {
        'res': True,
        'no': no,
        'apply_ids': guild_obj.apply,
        'guild_name': guild_obj.name
    }
Пример #23
0
def guild_boss_add_remote(guild_id, stage_id, boss_type, trigger_player_id, trigger_player_name):
    guild = guild_manager_obj.get_guild_obj(guild_id)
    # 是否存在boss
    if guild.guild_boss.stage_id:
        logger.debug("guild boss exist!")
        return {"result": False, "result_no": 240203}

    blue_units = assemble_monster(stage_id, game_configs.special_stage_config, "guild_boss_stages")
    logger.debug("blue_units %s" % blue_units)
    guild_boss = guild.add_guild_boss(stage_id, blue_units[0], boss_type, trigger_player_id, trigger_player_name)


    return {"result": True, "guild_boss": guild_boss.property_dict(), "p_list": guild.p_list}
Пример #24
0
def get_guild_task_records_remote(guild_id):
    """
    获取军团押劫记录
    """
    tasks = {}
    guild = guild_manager_obj.get_guild_obj(guild_id)
    for task_id, task in guild.escort_tasks.items():
        task.update_task_state()
        if task.state in [2, -1]:
            tasks[task_id] = construct_task_data(task)
    response = escort_pb2.GetEscortRecordsResponse()
    load_data_to_response(tasks, response.tasks)
    logger.debug("len %s %s" % (len(response.SerializePartialToString()), len(tasks)))
    return response.SerializePartialToString()
Пример #25
0
def get_guild_task_records_remote(guild_id):
    """
    获取军团押劫记录
    """
    tasks = {}
    guild = guild_manager_obj.get_guild_obj(guild_id)
    for task_id, task in guild.escort_tasks.items():
        task.update_task_state()
        if task.state in [2, -1]:
            tasks[task_id] = construct_task_data(task)
    response = escort_pb2.GetEscortRecordsResponse()
    load_data_to_response(tasks, response.tasks)
    logger.debug("len %s %s" %
                 (len(response.SerializePartialToString()), len(tasks)))
    return response.SerializePartialToString()
Пример #26
0
def get_guild_info_remote(guild_id, info_name, p_id):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(guild_id)
    if not guild_obj:
        return {'result': False, 'result_no': 844}
    res = {}
    if info_name:
        res.update({'result': True, info_name: getattr(guild_obj, info_name)})
    else:
        res.update({'result': True, 'guild_info': guild_obj.guild_data})
    if p_id:
        res.update(dict(position=guild_obj.get_position(p_id)))
    logger.debug("get_guild_info: %s" % res)
    return res
Пример #27
0
def guild_shop_buy_remote(g_id, shop_id, item_count, shop_type, vip_level):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 800}
    shop = guild_obj.get_shop_data(shop_type)
    if not shop:
        return {'res': False, 'no': 800}
    build_level = guild_obj.build.get(1)
    res = do_shop_buy(shop_id, item_count, shop, vip_level, build_level)
    if res.get('res'):
        guild_obj.save_data()
    return res
Пример #28
0
def mine_help_remote(g_id, p_id, seek_time, already_helps):
    """
    帮助加速
    此函数处理在帮助加速的的同时,更新玩家已经帮助列表
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}
    position = guild_obj.get_position(p_id)
    if not position:
        #  不在此军团
        return {'res': False, 'no': 800}

    build_level = guild_obj.build.get(1)
    build_conf = game_configs.guild_config.get(1)[build_level]
    shorten_time = build_conf.shortenTime

    help_ids = []
    p_ids = []  # 所有的成员ID
    uids = []
    for _, x in guild_obj.p_list.items():
        p_ids += x
    for _time, [mine_id, u_id, times] in guild_obj.mine_help.items():
        if u_id not in p_ids:
            del guild_obj.mine_help[_time]
            continue
        if u_id == p_id:
            continue
        if _time in already_helps:
            help_ids.append(_time)
            continue
        if seek_time and seek_time != _time:
            continue
        if not mine.guild_help(mine_id, u_id, p_id, shorten_time):
            del guild_obj.mine_help[_time]
        else:
            times += 1
            guild_obj.mine_help[_time] = [mine_id, u_id, times]
            help_ids.append(_time)
        uids.append(u_id)

    # help_ids 这次帮助的列表 加上 之前帮助的而且这个请求还存在的
    # already_helps 之前已经帮助过的列表
    # guild_obj.mine_help 军团里所有的请求
    return {'res': True, 'help_ids': help_ids, 'uids': uids}
Пример #29
0
def update_task_state_remote(protect_records, rob_records):
    """
    根据时间调整任务状态
    """
    return

    records = {}
    rob_records.update(protect_records)

    for task_id, info in rob_records.items():
        guild = guild_manager_obj.get_guild_obj(info.get("guild_id"))
        records[task_id] = guild

    for task_id, guild in records.items():
        task = guild.get_task_by_id(task_id)
        if not task: continue
        task.update_task_state()
Пример #30
0
def update_task_state_remote(protect_records, rob_records):
    """
    根据时间调整任务状态
    """
    return

    records = {}
    rob_records.update(protect_records)

    for task_id, info in rob_records.items():
        guild = guild_manager_obj.get_guild_obj(info.get("guild_id"))
        records[task_id] = guild

    for task_id, guild in records.items():
        task = guild.get_task_by_id(task_id)
        if not task: continue
        task.update_task_state()
Пример #31
0
def guild_appoint_remote(g_id, p_id, deal_type, target_id):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('join_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    position = guild_obj.get_position(p_id)
    if position != 1:
        # 没有权限
        return {'res': False, 'no': 849}
    p_list2 = guild_obj.p_list.get(2, [])
    p_list3 = guild_obj.p_list.get(3, [])

    dynamic_pb = guild_pb2.GuildDynamic()

    if deal_type == 1:  # 1提拔2撤销
        dynamic_pb.type = const.DYNAMIC_UP
        if len(p_list2) >= 2:
            return {'res': False, 'no': 860}
        if target_id not in p_list3:
            return {'res': False, 'no': 800}
        p_list3.remove(target_id)
        if p_list2:
            p_list2.append(target_id)
        else:
            guild_obj.p_list[2] = [target_id]
    else:
        dynamic_pb.type = const.DYNAMIC_DOWN
        if target_id not in p_list2:
            return {'res': False, 'no': 800}
        p_list2.remove(target_id)
        if p_list3:
            p_list3.append(target_id)
        else:
            guild_obj.p_list[3] = [target_id]

    dynamic_pb.time = int(time.time())
    name = tb_character_info.getObj(target_id).hget('nickname')
    dynamic_pb.name1 = name
    guild_obj.add_dynamic(dynamic_pb.SerializeToString())

    guild_obj.save_data()
    return {'res': True, 'name': guild_obj.name}
Пример #32
0
def up_build_remote(g_id, p_id, build_type):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}
    position = guild_obj.get_position(p_id)
    if position != 1:
        # 没有权限 或者 不在此军团
        return {'res': False, 'no': 800}

    build_info = guild_obj.build
    build_level = build_info.get(build_type)
    if not build_level:
        logger.error('up_build_870, build type error')
        return {'res': False, 'no': 891}
    build_conf = game_configs.guild_config.get(build_type)[build_level]
    if guild_obj.contribution < build_conf.exp:
        logger.error('up_build_870, build type error')
        return {'res': False, 'no': 888}

    if build_level >= game_configs.base_config.get('guild_level_max').get(
            build_type):
        logger.error('up_build_870, level max')
        return {'res': False, 'no': 800}

    for up_c in build_conf.condition:
        c_conf = game_configs.guild_config.get(up_c)
        my_build_level = build_info.get(c_conf.type)
        if not my_build_level or my_build_level < c_conf.level:
            logger.error('up_build_870, build type error')
            return {'res': False, 'no': 892}

    build_info[build_type] += 1
    guild_obj.build = build_info
    guild_obj.contribution -= build_conf.exp
    guild_obj.save_data()

    return {
        'res': True,
        'build_level': guild_obj.build.get(build_type),
        'level': guild_obj.level
    }
Пример #33
0
def guild_boss_add_remote(guild_id, stage_id, boss_type, trigger_player_id,
                          trigger_player_name):
    guild = guild_manager_obj.get_guild_obj(guild_id)
    # 是否存在boss
    if guild.guild_boss.stage_id:
        logger.debug("guild boss exist!")
        return {"result": False, "result_no": 240203}

    blue_units = assemble_monster(stage_id, game_configs.special_stage_config,
                                  "guild_boss_stages")
    logger.debug("blue_units %s" % blue_units)
    guild_boss = guild.add_guild_boss(stage_id, blue_units[0], boss_type,
                                      trigger_player_id, trigger_player_name)

    return {
        "result": True,
        "guild_boss": guild_boss.property_dict(),
        "p_list": guild.p_list
    }
Пример #34
0
def editor_call_remote(g_id, p_id, call):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('join_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    position = guild_obj.get_position(p_id)
    if not position or position > 2:
        # 没有权限
        return {'res': False, 'no': 849}
    new_call = ''
    if call:
        new_call = trie_tree.check.replace_bad_word(call)
    guild_obj.editor_call(new_call)

    guild_obj.save_data()
    return {'res': True, 'name': guild_obj.name}
Пример #35
0
def upgrade_guild_skill_remote(guild_id, skill_type):
    """ 获取玩家伤害信息
    """
    logger.debug("upgrade_guild_skill_remote : (%s, %s)" % (skill_type, guild_id))
    guild = guild_manager_obj.get_guild_obj(guild_id)

    skill_level = guild.guild_skills.get(skill_type)
    # 消耗技能点
    guild_skill_item = game_configs.guild_skill_config.get(skill_type).get(skill_level)
    if guild.skill_point < guild_skill_item.Consumption:
        logger.debug("consume not enough!")
        return dict(result=False, result_no = 24041)

    guild.skill_point -= guild_skill_item.Consumption

    guild.guild_skills[skill_type] = skill_level + 1
    guild.save_data()

    return dict(
            result=True)
Пример #36
0
def join_guild_remote(g_id, p_id):
    """
    no 844 id error 859 申请人数满 845 成员已经满
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('join_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}
    if len(guild_obj.apply) >= game_configs.base_config. \
            get('guildApplyMaxNum'):
        # "军团申请人数已满
        return {'res': False, 'no': 859}
    if guild_obj.p_num >= game_configs.guild_config. \
            get(1).get(guild_obj.build[1]).p_max:
        # "公会已满员"
        return {'res': False, 'no': 845}

    guild_obj.join_guild(p_id)
    guild_obj.save_data()
    return {'res': True, 'captain_id': guild_obj.p_list.get(1)[0]}
Пример #37
0
def upgrade_guild_skill_remote(guild_id, skill_type):
    """ 获取玩家伤害信息
    """
    logger.debug("upgrade_guild_skill_remote : (%s, %s)" %
                 (skill_type, guild_id))
    guild = guild_manager_obj.get_guild_obj(guild_id)

    skill_level = guild.guild_skills.get(skill_type)
    # 消耗技能点
    guild_skill_item = game_configs.guild_skill_config.get(skill_type).get(
        skill_level)
    if guild.skill_point < guild_skill_item.Consumption:
        logger.debug("consume not enough!")
        return dict(result=False, result_no=24041)

    guild.skill_point -= guild_skill_item.Consumption

    guild.guild_skills[skill_type] = skill_level + 1
    guild.save_data()

    return dict(result=True)
Пример #38
0
def guild_change_president_remote(g_id, p_id, target_id, name):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('join_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    position = guild_obj.get_position(p_id)
    if position != 1:
        # 没有权限
        return {'res': False, 'no': 849}
    flag = 0
    for pos, p_list in guild_obj.p_list.items():
        if pos == 1:
            continue
        if target_id in p_list:
            p_list.remove(target_id)
            guild_obj.p_list[1] = [target_id]
            flag = 1
    if not flag:
        return {'res': False, 'no': 850}
    p_list3 = guild_obj.p_list.get(3, [])
    if p_list3:
        p_list3.append(p_id)
    else:
        guild_obj.p_list[3] = [p_id]

    dynamic_pb = guild_pb2.GuildDynamic()
    dynamic_pb.type = const.DYNAMIC_CHANGE
    dynamic_pb.time = int(time.time())
    name2 = tb_character_info.getObj(target_id).hget('nickname')
    dynamic_pb.name1 = name
    dynamic_pb.name2 = name2

    guild_obj.add_dynamic(dynamic_pb.SerializeToString())
    guild_obj.save_data()
    return {'res': True, 'name': guild_obj.name}
Пример #39
0
def guild_boss_battle_remote(guild_id, str_red_units, red_unpar_data, seed1,
                             seed2):
    """开始战斗
    """
    logger.debug("hjqy_battle_remote======")
    guild = guild_manager_obj.get_guild_obj(guild_id)
    boss = guild.guild_boss
    red_units = cPickle.loads(str_red_units)
    blue_units = boss.blue_units
    logger.debug("blue unit length %s" % len(blue_units))

    origin_hp = boss.hp
    fight_result = guild_boss_start(red_units, blue_units, red_unpar_data, {},
                                    seed1, seed2)

    logger.debug("blue unit length %s" % len(blue_units))
    boss.blue_units = blue_units

    current_damage_hp = origin_hp - boss.hp
    logger.debug("origin_hp %s, current_hp %s, current_damage_hp %s" %
                 (origin_hp, boss.hp, current_damage_hp))

    guild_skill_point = 0
    if fight_result:
        stage_item = game_configs.special_stage_config.get(
            "guild_boss_stages").get(boss.stage_id)
        guild.skill_point += stage_item.Animal_Kill_Over
        guild_skill_point = stage_item.Animal_Kill_Over
        boss.reset()
        guild.save_data()

    logger.debug("guildboss_battle_remote over===================")
    guild.save_data()
    return dict(
        result=True,
        fight_result=fight_result,
        guild_skill_point=guild_skill_point,
    )
Пример #40
0
def mobai_remote(g_id, p_id, u_id, name):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('exit_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    p_list = guild_obj.p_list
    for _, _p_list in guild_obj.p_list.items():
        if u_id in _p_list:
            drop_num = game_configs.base_config.get('Worship2')[0].num
            dynamic_pb = guild_pb2.GuildDynamic()
            dynamic_pb.type = const.DYNAMIC_MOBAI
            dynamic_pb.time = int(time.time())
            dynamic_pb.name1 = name
            name2 = tb_character_info.getObj(u_id).hget('nickname')
            dynamic_pb.name2 = name2
            dynamic_pb.num1 = drop_num
            return {'res': True}

    logger.error('mobai, player dont in guild')
    return {'res': False, 'no': 800}
Пример #41
0
def guild_kick_remote(g_id, p_id, be_kick_ids):
    """
    """
    guild_obj = guild_manager_obj.get_guild_obj(g_id)
    if not guild_obj:
        logger.error('join_guild_remote guild id error! pid:%d' % p_id)
        return {'res': False, 'no': 844}

    position = guild_obj.get_position(p_id)
    kick_list = []
    p_ids = []
    for _, x in guild_obj.p_list.items():
        p_ids += x
    if not position or position > 2:
        # 没有权限 或者 不在此军团
        return {'res': False, 'no': 849}

    p_list2 = guild_obj.p_list.get(2, [])
    p_list3 = guild_obj.p_list.get(3, [])
    for be_kick_id in be_kick_ids:
        if be_kick_id in p_list2 and position == 1:
            guild_obj.p_list[2].remove(be_kick_id)
        elif be_kick_id in p_list3:
            guild_obj.p_list[3].remove(be_kick_id)
        else:
            continue
        kick_list.append(be_kick_id)

        dynamic_pb = guild_pb2.GuildDynamic()
        dynamic_pb.time = int(time.time())
        dynamic_pb.type = const.DYNAMIC_KICK
        name = tb_character_info.getObj(be_kick_id).hget('nickname')
        dynamic_pb.name1 = name
        guild_obj.add_dynamic(dynamic_pb.SerializeToString())

    guild_obj.save_data()
    return {'res': True, 'kick_list': kick_list, 'name': guild_obj.name}
Пример #42
0
def add_player_remote(guild_id, task_id, player_info, protect_or_rob, rob_no, protect_records):
    logger.debug("add_player_remote %s %s %s %s %s" % (guild_id, task_id, player_info, protect_or_rob, rob_no))
    guild = guild_manager_obj.get_guild_obj(guild_id)
    task = guild.get_task_by_id(task_id)

    for protecter in task.protecters:
        # 已存在该玩家,则不能再次加入
        if protecter.get("id") == player_info.get("id"):
            logger.error("已存在该玩家,则不能再次加入")
            return {'result': False, 'result_no': 190802}

    if protect_or_rob == 2 and task.rob_success_times() >= 2:
        # 接受劫运任务,如果该任务已经达到最大劫运次数
        logger.error("该任务已经达到最大劫运次数")
        return {'result': False, 'result_no': 190803}

    if protect_or_rob == 2 and rob_no == -1 and task.has_robbed(player_info.get("id")):
        # 已经被劫了
        logger.error("已经被劫了")
        return {"result": False, "result_no": 190804}

    if protect_or_rob == 2 and rob_no == -1 and task.has_robbing(player_info.get("id")):
        # 已经存在正在劫运的任务
        logger.error("已经存在正在劫运的任务")
        return {"result": False, "result_no": 190805}

    if protect_or_rob == 1 and task.state == 2:
        # 任务已经开启
        logger.error("押运任务已经开启")
        return {"result": False, "result_no": 190806}

    rob_task_info = {}
    if rob_no != -1:
        rob_task_info = task.rob_task_infos[rob_no]

    if protect_or_rob == 2 and rob_task_info and rob_task_info.get("rob_state") == -1:
        # 任务已经开启
        logger.error("劫运任务已经完成")
        return {"result": False, "result_no": 190807}

    if protect_or_rob == 1 and len(task.protecters) >= 3:
        # 押运人数已达上限
        logger.error("押运人数已达上限")
        return {"result": False, "result_no": 190808}

    if protect_or_rob == 2 and rob_task_info and len(rob_task_info.get("robbers", [])) >= 3:
        # 押运人数已达上限
        logger.error("押运人数已达上限")
        return {"result": False, "result_no": 190809}

    if protect_or_rob == 2 and rob_task_info.get("rob_state") == 0:
        # 任务已取消
        logger.error("任务已取消")
        return {'result': False, 'result_no': 190810}

    if rob_task_info:
        for robber in rob_task_info.get("robbers"):
            # 已存在该玩家,则不能再次加入
            if robber.get("id") == player_info.get("id"):
                logger.error("已存在该玩家,则不能再次加入")
                return {'result': False, 'result_no': 190802}

    if protect_or_rob == 1:
        for _task_id, info in protect_records.items():
            _task = guild.get_task_by_id(_task_id)
            if not _task or _task.state == -1: continue
            logger.debug("task_id %s" % _task_id)

            for k, protecter in enumerate(_task.protecters):
                logger.debug("k %s protecter_id %s player_id %s" % (k, protecter.get("id"), player_info.get("id")))
                if k != 0 and protecter.get("id") == player_info.get("id"):
                    logger.error("该玩家已经处于辅助劫运中,则不能再次加入!")
                    return {'result': False, 'result_no': 190811}



    player_guild = guild_manager_obj.get_guild_obj(player_info.get("g_id"))
    res = task.add_player(player_info, protect_or_rob, rob_no, player_guild.guild_info())
    rob_no = -1
    if protect_or_rob == 2:
        rob_no = res.get("rob_no")
    if len(task.protecters)==3 and protect_or_rob == 1:
        logger.debug("team up, then auto start task!")
        start_task(task, guild)
    logger.debug("rob_no %s" % rob_no)

    return dict(result=True,
            task=construct_task_data(task, rob_no))
Пример #43
0
def add_task_remote(guild_id, task_info):
    guild = guild_manager_obj.get_guild_obj(guild_id)
    guild.add_task(task_info)
    return dict(result=True)
Пример #44
0
def get_task_by_id_remote(guild_id, task_id):
    guild = guild_manager_obj.get_guild_obj(guild_id)
    task = guild.get_task_by_id(task_id)
    return construct_task_data(task)
Пример #45
0
def cancel_rob_task_remote(guild_id, task_id, rob_no):
    """取消劫运任务"""
    guild = guild_manager_obj.get_guild_obj(guild_id)
    task = guild.get_task_by_id(task_id)
    task.cancel_rob_task(rob_no)
    task.save_data()