Exemplo n.º 1
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
Exemplo n.º 2
0
    def check_time(self):
        current_date_time = time.time()
        current_day = localtime(current_date_time).tm_yday
        for k, v in self._shop_data.items():
            refresh_day = localtime(v['last_refresh_time']).tm_yday
            if current_day != refresh_day:
                v['refresh_times'] = 0
                v['limit_items'] = {}
                v['last_refresh_time'] = time.time()

            luck_day = localtime(v['luck_time']).tm_yday
            if current_day != luck_day:
                v['luck_time'] = time.time()
                v['luck_num'] = 0.0
                v['limit_items'] = {}

            if 'limit_items' not in v:
                v['limit_items'] = {}

            if 'vip_limit_items' not in v:
                v['vip_limit_items'] = {}

            #自动刷新列表
            shop_type_info = game_configs.shop_type_config.get(k)
            freeRefreshTime = shop_type_info.freeRefreshTime
            if shop_type_info.freeRefreshTime == "-1":
                continue
            logger.debug("%s %s" % (freeRefreshTime, v['last_auto_refresh_time']))
            if time.time() > is_past_time(freeRefreshTime, v['last_auto_refresh_time']):
                self.auto_refresh_items(k)
Exemplo n.º 3
0
def __login(uid, session):
    """login """
    res = verify_login(uid, session)
    logger.debug(res)
    if res.get('errcode') == 200:
        return str({'result': True, 'uid': '\'%s\'' % uid})
    return str({'result': False})
Exemplo n.º 4
0
def pvp_daily_award():
    logger.debug('pvp daily send award mail ')
    arena_award = game_configs.base_config.get('arena_day_points')
    records = tb_pvp_rank.zrangebyscore(0, 10000, withscores=True)

    childs = groot.childsmanager.childs
    for k, v in records:
        rank = int(v)
        character_id = int(k)
        if character_id < 10000:
            continue
        for up, down, mail_id in arena_award.values():
            if rank >= up and rank <= down:
                break
        else:
            logger.error('pvp daily award error:%s-%s', rank, character_id)
            continue

        mail_data, _ = deal_mail(conf_id=mail_id, receive_id=character_id)

        for child in childs.values():
            if 'gate' in child.name:
                result = child.pull_message_remote('receive_mail_remote',
                                                   character_id,
                                                   (mail_data,))
                if type(result) is bool and result:
                    break
                else:
                    logger.debug('pvp_daily_award_tick result:%s,%s,%s',
                                 result, k, mail_data)
        else:
            message_cache.cache_time('receive_mail_remote', character_id, 60*60*24*180, mail_data)
        tlog_action.log('PvpDailyAward', character_id, mail_id, rank)
Exemplo n.º 5
0
 def get_task_by_id(self, task_id):
     task = self._escort_tasks.get(task_id)
     if not task:
         logger.debug("task_id %s not exists!" % task_id)
         return None
     task.update_task_state()
     return task
Exemplo n.º 6
0
 def send_award_in(self):
     """ 参与奖励
     """
     logger.debug("send_award_in=========== %s", self._rank_instance.get(1, 0))
     for player_id, v in self._rank_instance.get(1, 0):
         logger.debug("send_award_in==== %s %s" % (player_id, v))
         self.send_award(player_id, const.PVB_IN_AWARD, int(v))
Exemplo n.º 7
0
def continus_sign_in_1402(pro_data, player):
    """累积签到"""
    request = ContinuousSignInRequest()
    request.ParseFromString(pro_data)
    days = request.sign_in_days
    response = ContinuousSignInResponse()

    # 验证连续签到日期
    if len(player.sign_in_component.sign_in_days) < days:
        response.res.result = False
        response.res.result_no = 1402
        return response.SerializePartialToString()
    if days in player.sign_in_component.continuous_sign_in_prize:
        response.res.result = False
        response.res.result_no = 1403
        return response.SerializePartialToString()

    player.sign_in_component.continuous_sign_in_prize.append(days)
    player.sign_in_component.save_data()

    reward, config_id = player.sign_in_component.get_sign_in_reward(days)
    if not reward:
        response.res.result = False
        response.res.result_no = 1404
        return response.SerializePartialToString()
    return_data = gain(player, reward, const.CONTINUS_SIGN)
    get_return(player, return_data, response.gain)

    tlog_action.log('ContinusSignIn', player, days, config_id)

    response.res.result = True
    logger.debug(response)
    return response.SerializePartialToString()
Exemplo n.º 8
0
def check_time(shop_data):
    # 1 个人 2 军团
    current_date_time = int(time.time())
    # current_day = localtime(current_date_time).tm_yday
    for k, v in shop_data.items():
        shop_type_info = game_configs.shop_type_config.get(k)
        freeRefreshTime = shop_type_info.freeRefreshTime
        if freeRefreshTime != '-1' and current_date_time > is_past_time(
                freeRefreshTime, v['last_refresh_time']):
            v['refresh_times'] = 0
            v['guild_items'] = {}
            v['items'] = {}
            v['last_refresh_time'] = current_date_time
            v['luck_time'] = current_date_time
            v['luck_num'] = 0.0

        # 自动刷新列表
        refresh = shop_type_info.refresh
        if refresh == -1:
            continue
        logger.debug("auto refresh %s %s" %
                     (refresh, v['last_auto_refresh_time']))
        tm_now = time.localtime(current_date_time)
        tm_refresh = time.localtime(v['last_auto_refresh_time'])
        if tm_now.tm_yday != tm_refresh.tm_yday or \
           tm_now.tm_hour / refresh * refresh > tm_refresh.tm_hour:
            do_auto_refresh_items(k, shop_data)
Exemplo n.º 9
0
def assemble_monster(stage_id, stage_config, stage_type_name):
    """组装怪物战斗单位
    """
    stage_config = stage_config.get(stage_type_name).get(stage_id)

    monsters = []
    for i in range(3):
        logger.debug("stage_id %s" % stage_id)
        logger.debug(
            "stage_group_id %s" %
            getattr(
                stage_config, 'round%s' %
                (i + 1)))
        monster_group_id = getattr(stage_config, 'round%s' % (i+1))
        if not monster_group_id:
            continue
        monster_group_config = game_configs.monster_group_config.get(monster_group_id)

        round_monsters = {}

        boss_position = monster_group_config.bossPosition

        for j in range(6):
            pos = j + 1
            monster_id = getattr(monster_group_config, 'pos%s' % pos)
            if not monster_id:
                continue
            is_boss = False
            if j + 1 == boss_position:
                is_boss = True
            monster_config = game_configs.monster_config.get(monster_id)
            logger.info('怪物ID:%s' % monster_id)

            battle_unit = do_assemble(
                0,
                monster_config.id,
                monster_config.quality,
                [],
                monster_config.hp,
                monster_config.atk,
                monster_config.physicalDef,
                monster_config.magicDef,
                monster_config.hit,
                monster_config.dodge,
                monster_config.cri,
                monster_config.criCoeff,
                monster_config.criDedCoeff,
                monster_config.block,
                monster_config.ductility,
                pos,
                monster_config.monsterLv,
                0,
                is_boss,
                is_hero=False)
            round_monsters[pos] = battle_unit
        monsters.append(round_monsters)

    # 保存关卡怪物信息, 掉落信息
    logger.info('关卡怪物信息: %s ' % monsters)
    return monsters
Exemplo n.º 10
0
 def delete_hero(self, hero_no):
     if self._heros.get(hero_no):
         hero = self._heros[hero_no]
         hero.delete()
         del self._heros[hero_no]
     else:
         logger.debug("don't find hero_no from self._heros")
Exemplo n.º 11
0
def gm():
    print("gm================")
    response = {}
    res = {}
    admin_command = ['reset_star_gift', 'update_excel', 'get_user_info', 'send_mail',
                     'get_user_hero_chips', 'get_user_eq_chips',
                     'get_user_finances', 'get_user_items',
                     'get_user_guild_info', 'get_user_heros',
                     'get_user_eqs', 'copy_user', 'update_server_list',
                     'add_push_message']
    print request.args, type(request.args)
    if request.args:
        t_dict = request.args
    else:
        t_dict = request.form

    logger.info('gm2admin,command:%s', t_dict['command'])

    if t_dict['command'] in admin_command:
        com = t_dict['command'] + "(t_dict)"
        res = eval(com)
    else:
        res = remote_gate.from_admin_rpc_remote(cPickle.dumps(t_dict))
        if res['success'] == 2:
            com = t_dict['command'] + "(t_dict)"
            logger.debug("gm=======%s" % com)
            res = eval(com)
    logger.info('######################################,server2gm:%s', res)

    return json.dumps(res)
Exemplo n.º 12
0
        def func():
            consume_return_data = consume(player, price,
                                          get_reason(shop_item.get('type')),
                                          multiple=item_count,
                                          shop=shop,
                                          luck_config=shop_type_item)  # 消耗
            return_data = gain(player,
                               shop_item.gain,
                               get_reason(shop_item.get('type')),
                               multiple=item_count,
                               lucky_attr_id=_lucky_attr)  # 获取
            get_return(player, consume_return_data, response.consume)
            get_return(player, return_data, response.gain)
            if shop_item.ExchangeValue:
                lucky_data = gain(player,
                                  shop_item.ExchangeValue,
                                  get_reason(shop_item.get('type')))
                get_return(player, lucky_data, response.gain)

            for _ in range(item_count):
                send_tlog(player, shop_item)
            logger.debug("allBuyRefresh %s" % shop_type_item.allBuyRefresh)
            if not shop['item_ids'] and shop_type_item.allBuyRefresh:
                logger.debug("shop auto refresh =============")
                player.shop.auto_refresh_items(shop_item.get('type'))
                response.is_all_buy = True
Exemplo n.º 13
0
    def set_next_stage(self, kill_or_not=False):
        """
        根据id规则确定下一个关卡
        如果boss未被击杀则不升级
        """
        logger.debug("current_stage_id1%s" % self._stage_id)
        current_stage_id = self._stage_id
        origin_stage_id_am = self._stage_id_am
        if current_stage_id == 0:
            self._stage_id_am = 800101
            self._stage_id_pm = 800102
            self._stage_id = 800101
            return
        if kill_or_not:  # 如果boss被击杀,则升级boss
            logger.debug("kill boss =============")
            if current_stage_id == self._stage_id_am: # am
                self._stage_id_am = current_stage_id + 100
            else:  # pm
                self._stage_id_pm = current_stage_id + 100

        if current_stage_id == origin_stage_id_am:
            self._stage_id = self._stage_id_pm
        else:
            self._stage_id = self._stage_id_am

        logger.debug("current_stage_id3%s" % self._stage_id)
        logger.debug("current_stage_id_am%s" % self._stage_id_am)
        logger.debug("current_stage_id_pm%s" % self._stage_id_pm)
Exemplo n.º 14
0
def fight_start(stage, fid, player):
    """开始战斗
    """
    # 校验信息:是否开启,是否达到次数上限等
    res = stage.check()
    if not res.get('result'):
        return res

    fight_cache_component = player.fight_cache_component
    fight_cache_component.stage_id = stage.stage_id
    fight_cache_component.stage = stage
    red_units, blue_units, drop_num, monster_unpara = fight_cache_component.fighting_start()

    # 好友
    char_obj = tb_character_info.getObj(fid)
    lord_data = char_obj.hget('lord_attr_info')
    f_unit = None
    if lord_data and not is_not_open(player, FO_FRIEND_SUPPORT):
        info = lord_data.get('info')
        f_unit = BattleUnit.loads(info)
    else:
        logger.debug('can not find friend id :%d' % fid)

    return dict(result=True,
                red_units=red_units,
                blue_units=blue_units,
                drop_num=drop_num,
                monster_unpara=monster_unpara,
                f_unit=f_unit,
                result_no=0)
Exemplo n.º 15
0
def invite_1908(data, player):
    """发送/接受邀请"""
    request = escort_pb2.InviteEscortTaskRequest()
    request.ParseFromString(data)
    logger.debug("request %s" % request)
    response = common_pb2.CommonResponse()
    task_id = request.task_id
    send_or_in = request.send_or_in
    protect_or_rob = request.protect_or_rob
    task_guild_id = request.task_guild_id
    rob_no = request.rob_no

    escort_open_time_item = game_configs.base_config.get("EscortOpenTime")
    if not is_in_period(escort_open_time_item):
        logger.error("feature not open!")
        response.result = False
        response.result_no = 30000
        return response.SerializePartialToString()
    res = None
    if send_or_in == 1:
        res = send_invite(player, task_id, protect_or_rob, task_guild_id, rob_no)
    elif send_or_in == 2:
        res = in_invite(player, task_id, protect_or_rob, task_guild_id, rob_no)

    response.result = res.get('result')
    if not res.get('result'):
        response.result_no = res.get('result_no')
        return response.SerializePartialToString()

    tlog_action.log('GuildTaskInvite', player, task_id, task_guild_id, send_or_in, protect_or_rob, rob_no)
    response.result = True
    return response.SerializePartialToString()
Exemplo n.º 16
0
def pvp_fight(player, character_id, line_up, skill, response, callback,
              is_copy_unit=False):
    record = get_pvp_data(character_id)
    if not record:
        logger.error('player id is not found:%s', character_id)
        response.res.result = False
        response.res.result_no = 150001
        return response.SerializePartialToString()

    best_skill, skill_level = player.line_up_component.get_skill_info_by_unpar(skill)
    logger.debug("best_skill=================== %s" % best_skill)

    if is_copy_unit:
        blue_units = record.get('copy_units2')
    else:
        blue_units = record.get('copy_units')
    save_line_up_order(line_up, player, skill)

    red_units = player.fight_cache_component.get_red_units()

    seed1, seed2 = get_seeds()
    fight_result = pvp_process(player, line_up, red_units, blue_units,
                               best_skill, record.get("best_skill"),
                               record.get("level"), skill, seed1, seed2,
                               const.BATTLE_PVP)

    pvp_assemble_units(red_units, blue_units, response)
    response.seed1 = seed1
    response.seed2 = seed2
    response.fight_result = fight_result
    response.red_skill = skill
    response.red_skill_level = skill_level
    response.blue_skill = record.get("unpar_skill")
    response.blue_skill_level = record.get("unpar_skill_level")
    return callback(player, fight_result)
Exemplo n.º 17
0
    def check_time(self):
        """
        时间改变,重置数据
        """
        current_time_stamp = get_current_timestamp()
        for k, v in self._act_lucky_heros.items():
            stage_info = game_configs.special_stage_config.get('act_stages').get(k)
            if v.get('time')[0] > current_time_stamp or v.get('time')[1] < current_time_stamp:
                v['heros'], v['time'][0], v['time'][1] = update_lucky_hero(stage_info.type, k%10)

        logger.debug("character_stage check time")
        logger.debug(self._act_stage_info)

        if is_next_day(current_time_stamp, self._elite_stage_info[2]):
            self._elite_stage_info[0] = 0
            self._elite_stage_info[1] = 0
            self._elite_stage_info[2] = current_time_stamp
        if is_next_day(current_time_stamp, self._act_stage_info[2]):
            self._act_stage_info[0] = 0
            self._act_stage_info[1] = 0
            self._act_stage_info[2] = current_time_stamp

        logger.debug("_act_lucky_heros %s" % self._act_lucky_heros)
        logger.debug(self._elite_stage_info)
        logger.debug(self._act_stage_info)
        self.save_data()
Exemplo n.º 18
0
 def set_pay_arg(self, value):
     self._platform = value.get("platform")
     self._openid = str(value.get("openid"))
     self._openkey = str(value.get("openkey"))
     self._pay_token = str(value.get("pay_token"))
     self._appid = str(value.get("appid"))
     #self._appkey = str(value.get("appkey"))
     self._pf = str(value.get("pf"))
     self._pfkey = str(value.get("pfkey"))
     login_channel = str(value.get("login_channel"))
     logger.debug("login_channel %s" % login_channel)
     if login_channel != "tencent":
         self.REMOTE_DEPLOYED = False
     # self._zoneid = str(value.get("zoneid"))
     if self.REMOTE_DEPLOYED:
         previous_gold = self._owner.finance.gold
         self.get_balance()  # 登录时从tx拉取gold
         add_gold = self._owner.finance.gold - previous_gold
         if add_gold == 0:
             return
         logger.info('tencent add gold:%s', add_gold)
         recharge_config = game_configs.recharge_config.get('android')
         for k, item in recharge_config.items():
             if item.get('activity') == add_gold:
                 response = GetGoldResponse()
                 self._owner.recharge.recharge_gain(item, response, 5, True)
                 break
         else:
             logger.error('tencent add gold-num:%d', add_gold)
Exemplo n.º 19
0
def receive_mail_remote(mail_data, is_online, player):
    """接收邮件"""
    mail = Mail_PB()
    mail.ParseFromString(mail_data)
    logger.debug('receive_mail:%s', mail)
    if mail.mail_type == 1:
        if mail.sender_id in player.stamina.contributors:
            logger.error('this contributor has already given stamina:%s',
                         mail.sender_id)
            return True
        else:
            player.stamina.contributors.append(mail.sender_id)
    if mail.config_id == game_configs.base_config.get('guildInviteMail'):
        mails = player.mail_component.get_mails()
        for mail_pb in mails:
            if mail.guild_id and mail_pb.guild_id == mail.guild_id:
                return True

    player.mail_component.add_mail(mail)
    player.mail_component.save_data()

    if is_online:
        response = mailbox_pb2.ReceiveMailResponse()
        response.mail.CopyFrom(mail)
        remote_gate.push_object_remote(1305,
                                       response.SerializePartialToString(),
                                       [player.dynamic_id])
    return True
Exemplo n.º 20
0
def is_not_open(player, feature_type):
    """
    是否开启
    """
    logger.debug("feature_type %s player_level %s" % (feature_type,
                                                      player.base_info.level))
    feature_item = game_configs.features_open_config.get(feature_type)
    if not feature_item:
        logger.error("there is no such feature_type %s!" % feature_type)
        return True
    logger.debug("open_type %s open %s" % (feature_item.open_type,
                                           feature_item.open))

    if feature_item.open_type == 1:
        # 玩家等级
        if feature_item.open <= player.base_info.level:
            return False
        else:
            return True

    if feature_item.open_type == 2:
        # 关卡
        open_stage_id = feature_item.open
        if player.stage_component.get_stage(open_stage_id).state == 1:
            return False
        else:
            return True
    return True
Exemplo n.º 21
0
def pvp_award():
    arena_award = game_configs.base_config.get('arena_shorttime_points')

    records = tb_pvp_rank.zrangebyscore(0, 10000, withscores=True)

    childs = groot.childsmanager.childs
    for k, v in records:
        rank = int(v)
        character_id = int(k)
        if character_id < 10000:
            continue
        for up, down, score in arena_award.values():
            if rank >= up and rank <= down:
                award = score
                break
        else:
            logger.error('pvp award error:%s', k)
            continue

        for child in childs.values():
            if 'gate' in child.name:
                result = child.pull_message_remote('pvp_award_remote',
                                                   character_id,
                                                   (award,))
                if type(result) is bool and result:
                    logger.debug('pvp_award_tick result:%s,%s,%s',
                                 result, k, award)
                    break
        else:
            logger.debug('pvp_award_tick cache:%s,%s', k, award)
            message_cache.cache('pvp_award_remote', character_id, award)
Exemplo n.º 22
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,
            )
Exemplo n.º 23
0
def receive_rob_task(player, task_id, task_guild_id):
    """
    接受劫运任务
    """
    receive_rob_times = player.finance[const.GUILD_ESCORT_ROB_TIMES]
    escort_open_time_item = game_configs.base_config.get("EscortOpenTime")
    if not is_in_period(escort_open_time_item):
        logger.error("feature not open!")
        return {'result': False, 'result_no': 30000}

    if receive_rob_times <= 0:
        logger.error("receive_rob_times! %s" % receive_rob_times)
        return {'result': False, 'result_no': 190901}

    escort_component = player.escort_component
    task = remote_gate["world"].get_task_by_id_remote(task_guild_id, task_id)
    if task.get('state') != 2:
        logger.error("task state not right! %s" % task.get("state"))
        return {'result': False, 'result_no': 190902}

    #if player.base_info.id in task.get('rob_task_infos') and task.get():
        #logger.debug("this task has been robbed!")
        #return {'result': False, 'result_no': 190902}

    logger.debug("receive_rob_task, start=======")
    res = remote_gate["world"].add_player_remote(task_guild_id, task_id, get_player_info(player), 2, -1, {})
    logger.debug("receive_rob_task, end=======")
    if res.get('result'):
        escort_component.rob_records[task.get("task_id")] = dict(guild_id=task_guild_id, rob_no=res.get('task').get('rob_task_infos')[0].get('rob_no'))
        escort_component.save_data()

    return res
Exemplo n.º 24
0
def refresh_tasks_1904(data, player):
    """刷新任务列表"""
    response = escort_pb2.RefreshEscortTaskResponse()
    response.res.result = True
    escort_component = player.escort_component

    if escort_component.refresh_times >= game_configs.base_config.get("EscortRefreshFrequencyMax"):
        logger.error("reach the max refresh time!")
        response.res.result = False
        response.res.result_no = 190401
        return response.SerializePartialToString()

    price = game_configs.base_config.get("EscortRefreshPrice")
    need_gold = price[escort_component.refresh_times]

    def func():
        escort_component.refresh_tasks() #刷新任务
        escort_component.refresh_times = escort_component.refresh_times + 1
        escort_component.save_data()
        for _, task in escort_component.tasks.items():
            task_pb = response.tasks.add()
            update_task_pb(task, task_pb)
    player.pay.pay(need_gold, const.REFRESH_ESCORT_TASKS, func)

    tlog_action.log('RefreshEscortTasks', player, escort_component.refresh_times+1)

    logger.debug("response %s" % response)
    return response.SerializePartialToString()
Exemplo n.º 25
0
def start_rob_escort(player, task_id, response, task_guild_id, rob_no):
    """
    手动开始劫运
    """
    res = remote_gate["world"].start_rob_escort_remote(task_guild_id, task_id, rob_no, player.base_info.id)
    if res.get("result"):
        player.finance.consume(const.GUILD_ESCORT_ROB_TIMES, 1, const.ESCORT_ROB)
        player.finance.save_data()
        update_rob_task_info_pb(res.get("protecters", []), res.get("rob_task_info", {}), response.rob_task_info, protect_or_rob=2)
        # push info to head players
        push_response = escort_pb2.InviteEscortTaskPushResponse()
        task = res.get("task")
        update_task_pb(task, push_response.task)
        push_response.protect_or_rob = 2
        logger.debug("19101 push_response %s" % push_response)
        for player_info in res.get("rob_task_info", {}).get("robbers"):
            remote_gate.push_object_character_remote(19101, push_response.SerializePartialToString(), [player_info.get("id")])

        remote_gate.push_object_character_remote(19102, push_response.SerializePartialToString(), [task.get("protecters")[0].get("id")])
        # 参与劫运次数
        task = res.get("task")
        for no, robber in enumerate(res.get("rob_task_info", {}).get("robbers", [])):
            if res.get("rob_task_info").get("rob_result", False):
                push_message("add_guild_activity_times_remote", int(robber.get("id")), task.get("task_no"), 2)
            if no == 0: continue
            push_message("remove_escort_in_times_remote", int(robber.get("id")), 2)
    return res
Exemplo n.º 26
0
 def _get_balance_m(self):
     if not self.REMOTE_DEPLOYED:
         return
     logger.debug("_get_balance_m: platform- %s\
                  openid- %s \
                  openkey - %s \
                  pay_token - %s \
                  appid - %s \
                  appkey - %s \
                  pf - %s \
                  pfkey - %s \
                  zoneid - %s "%
                  (self._platform, self._openid,
                   self._openkey, self._pay_token,
                   self._appid, self._appkey,
                   self._pf,
                   self._pfkey, self._zoneid))
     try:
         data = GlobalObject().pay.get_balance_m(self._platform, self._openid, self._appid,
                                      self._appkey, self._openkey, self._pay_token,
                                      self._pf, self._pfkey, self._zoneid)
         logger.debug(data)
     except Exception, e:
         logger.error("get balance error:%s" % e)
         logger.error(traceback.format_exc())
         return
Exemplo n.º 27
0
def send_invite(player, task_id, protect_or_rob, task_guild_id, rob_no):
    """docstring for send_invite"""
    AnnouncementCoolingTime = game_configs.base_config.get("AnnouncementCoolingTime", 0)
    task = remote_gate["world"].get_task_by_id_remote(task_guild_id, task_id)
    if protect_or_rob == 1:
        last_send_invite_time = task.get("last_send_invite_time", 0)
        if last_send_invite_time + AnnouncementCoolingTime > int(get_current_timestamp()):
            logger.error("last_send_invite_time %s AnnouncementCoolingTime %s current %s" % (last_send_invite_time, AnnouncementCoolingTime, int(get_current_timestamp())))
            return {'result': False, 'result_no': 1908041}
    if protect_or_rob == 2:
        last_send_invite_time = task.get("rob_task_infos")[0].get("last_send_invite_time", 0)
        if last_send_invite_time + AnnouncementCoolingTime > int(get_current_timestamp()):
            logger.error("last_send_invite_time %s AnnouncementCoolingTime %s current %s" % (last_send_invite_time, AnnouncementCoolingTime, int(get_current_timestamp())))
            return {'result': False, 'result_no': 1908041}

    task = remote_gate["world"].send_escort_task_invite_remote(task_guild_id, task_id, player.guild.g_id, rob_no, protect_or_rob)
    if not task:
        logger.error("can't find this task!")
        return {'result': False, 'result_no': 190801}


    push_response = escort_pb2.InviteEscortTaskPushResponse()
    update_task_pb(task, push_response.task)
    push_response.protect_or_rob = protect_or_rob
    guild_info = {}
    if protect_or_rob == 1:
        guild_info = task.get("protect_guild_info")
    if protect_or_rob == 2:
        guild_info = task.get("rob_task_infos")[0].get("rob_guild_info")

    remote_gate.push_object_character_remote(19082, push_response.SerializePartialToString(), player.guild.get_guild_member_ids(guild_info.get("p_list", {})))
    logger.debug("push_response %s" % push_response)


    return {'result': True}
Exemplo n.º 28
0
def hero_sacrifice_105(data, player):
    """武将献祭"""
    args = hero_request_pb2.HeroSacrificeRequest()
    args.ParseFromString(data)
    response = hero_response_pb2.HeroSacrificeResponse()

    heros = player.hero_component.get_heros_by_nos(args.hero_nos)
    if len(heros) == 0:
        logger.error("hero %s is not exists." % str(args.hero_nos))
    response = hero_sacrifice_oper(heros, player)
    # remove hero
    player.hero_component.delete_heros_by_nos(args.hero_nos)

    # hero chip
    for hero_chip in args.hero_chips:
        sacrifice_gain = game_configs.chip_config.get("chips").get(hero_chip.hero_chip_no).sacrificeGain
        return_data = gain(player,
                           sacrifice_gain,
                           const.HERO_CHIP_SACRIFICE_OPER,
                           multiple=hero_chip.hero_chip_num)
        get_return(player, return_data, response.gain)
        # remove hero_chip
        temp = player.hero_chip_component.get_chip(hero_chip.hero_chip_no)
        if temp:
            temp.consume_chip(hero_chip.hero_chip_num)  # 消耗碎片
    player.hero_chip_component.save_data()
    logger.debug(response)
    return response.SerializeToString()
Exemplo n.º 29
0
def remove_escort_in_times_remote(protect_or_rob, is_online, player):
    logger.debug("remove_escort_in_times_remote========= %s" % protect_or_rob)
    if protect_or_rob == 1:
        player.escort_component.protect_times += 1
    else:
        player.escort_component.rob_times += 1
    player.escort_component.save_data()
Exemplo n.º 30
0
def rand_pick_attr(attr):
    attrType, attrValueType, attrValue, attrIncrement = -1, -1, -1, 0
    rand_pool = {}
    for at, v in attr.items():
        rand_pool[at] = int(v[0] * 100)
    rand = random.randint(0, sum(rand_pool.values()))

    for k, v in rand_pool.items():
        if v >= rand:
            attrType = k
            if len(attr[k]) == 5:
                _, attrValueType, valueMin, valueMax, attrIncrement = attr[k]
            else:
                _, attrValueType, valueMin, valueMax = attr[k]
            attrValue = valueMin + random.random() * (valueMax - valueMin)
            # add increment formula
            inputs = {'EquNumRandom': attrValue,'EquNumMax': valueMax, 'EquNumMin': valueMin, 'grow': attrIncrement}
            if valueMax != valueMin:
                formula = game_configs.formula_config.get("equGrowUpParameter").get("formula")
                assert formula!=None, "formula can not be None"
                attrIncrement = eval(formula, inputs)
            else:
                formula = game_configs.formula_config.get("equGrowUpParameter2").get("formula")
                assert formula!=None, "formula can not be None"
                attrIncrement = eval(formula, inputs)
            logger.debug("increment value: %s %s" % (attrIncrement, attrIncrement))

            del attr[k]
            break
        else:
            rand -= v
    return attrType, attrValueType, attrValue, attrIncrement
Exemplo n.º 31
0
def pull_message_remote(character_id):
    count = 0
    childs = groot.childsmanager.childs
    # print groot.childsmanager

    logger.debug("pull all message")
    for key, message in message_cache.get(character_id):
        topic_id = message.get('topic_id')
        character_id = int(message.get('character_id'))
        args = (topic_id, character_id, message.get('args'))
        kw = message.get('kw')
        logger.debug("args:%s", message.get('args'))
        logger.debug("message.pull_message_remote")

        for child in childs.values():
            if 'gate' in child.name:
                result = child.pull_message_remote(*args, **kw)
                logger.debug("result:%s", result)
                if type(result) is bool and result:
                    message_cache.delete(character_id, key)
                    count += 1
                    break
    return True
Exemplo n.º 32
0
def update_rank_items(k, rank_item_pb, rank_item):
    rank_item_pb.nickname = rank_item.get("nickname", "")
    rank_item_pb.level = rank_item.get("level", 0)
    rank_item_pb.vip_level = rank_item.get("vip_level", 0)
    rank_item_pb.now_head = rank_item.get("now_head", 0) #rank_item.get("first_hero_no", 0)
    rank_item_pb.demage_hp = int(rank_item.get("demage_hp", 0))
    if rank_item.get("line_up_info"):
        ##rank_item_pb.line_up_info = line_up_pb2.LineUpResponse()
        rank_item_pb.line_up_info.ParseFromString(rank_item.get("line_up_info"))
        #line_up_info = line_up_pb2.LineUpResponse()
        #rank_item_pb.line_up_info.ParseFromString()
    rank_item_pb.player_id = rank_item.get("player_id", 0)
    rank_item_pb.rank_no = k
    logger.debug("player_id %s", rank_item_pb.player_id)
    logger.debug("rank_no %s", rank_item_pb.rank_no)
    logger.debug("demage_hp %s", rank_item_pb.demage_hp)
Exemplo n.º 33
0
def hjqy_battle_remote(player_info, boss_id, str_red_units, red_unpar_data, attack_type, seed1, seed2):
    """开始战斗
    """
    logger.debug("hjqy_battle_remote======")
    red_units = cPickle.loads(str_red_units)
    result = False
    boss = hjqy_manager.get_boss(boss_id)
    player_id = player_info.get("player_id")
    player_level = player_info.get("level")
    blue_units = boss.blue_units

    origin_hp = boss.hp
    result = hjqy_start(red_units,  blue_units, red_unpar_data, {}, attack_type, seed1, seed2, player_level)

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

    player_info["damage_hp"] = current_damage_hp
    hjqy_manager.add_rank_item(player_info) # 添加排行

    is_kill = 0
    if boss.get_state() == const.BOSS_DEAD: # 击杀boss
        is_kill = 1
        # send last kill reward mail
        hjqyKillBossReward = game_configs.base_config.get("hjqyKillBossRewardID")
        mail_data, _ = deal_mail(conf_id=hjqyKillBossReward, receive_id=int(player_id))
        remote_gate = GlobalObject().child('gate')
        remote_gate.push_message_to_transit_remote('receive_mail_remote',
                                                   int(player_id), mail_data)
        result = True
    #return dict(result=result, state=boss.get_state())
    logger.debug("hjqy_battle_remote over===================")
    boss.save_data()
    return result, boss.get_state(), current_damage_hp, is_kill
Exemplo n.º 34
0
    def mine_activity_jindu(self, act_conf):
        """
        获取秘境活动进度
        """
        parameterE = act_conf.parameterE
        act_type = act_conf.type
        if act_type in [56, 58]:
            condition = self._act_infos.get(act_conf.id, 0)
            logger.debug("condition %s" % condition)
            return condition
        elif act_type == 57:
            condition = []
            if self._act_infos.get(act_conf.id):
                condition = self._act_infos.get(act_conf.id)[1]
            logger.debug("condition %s" % condition)

            mine_num = 0
            for temp in condition:
                if temp[WIN_MINE_QUALITY] >= parameterE.get(
                        WIN_MINE_QUALITY, 0):
                    mine_num += 1
            return mine_num
        elif act_type == 59:
            condition = []
            if self._act_infos.get(act_conf.id):
                condition = self._act_infos.get(act_conf.id)[1]
            logger.debug("condition %s" % condition)
            mix_runt_num = 0
            for temp in condition:
                if temp[MIX_RUNT_QUALITY] >= parameterE.get(
                        MIX_RUNT_QUALITY, 0):
                    mix_runt_num += 1
            return mix_runt_num

        logger.debug("mine_activity_jindu act_type %s haven't process!" %
                     act_type)
        return None
Exemplo n.º 35
0
def google_consume_verify_10002(data, player):
    request = google_pb2.GoogleConsumeVerifyRequest()
    request.ParseFromString(data)
    logger.debug(request)

    response = google_pb2.GoogleConsumeVerifyResponse()
    response.res.result = False
    result = verify_signature(request.signature, request.data)
    logger.debug('verify_signature:%s', result)

    data = eval(request.data)
    recharge_item = game_configs.recharge_config.get('android').get(
        data.get('productId'))

    if result:
        if recharge_item is None:
            logger.debug('google consume goodid not in rechargeconfig:%s',
                         data.get('productId'))
        else:
            player.recharge.recharge_gain(recharge_item, response, 3)  #发送奖励邮件
            response.res.result = True

    logger.debug(response)
    return response.SerializeToString()
Exemplo n.º 36
0
def refresh_shop_items_507(pro_data, player):
    """刷新商品列表"""
    request = shop_pb2.RefreshShopItems()
    request.ParseFromString(pro_data)
    shop_type = request.shop_type

    response = shop_pb2.GetShopItemsResponse()
    if not player.shop.check_shop_refresh_times(shop_type):
        logger.debug("already reach refresh max!")
        response.res.result = False
        response.res.result_no = 50701
        return response.SerializePartialToString()

    response.res.result = player.shop.refresh_price(shop_type, response)
    if not response.res.result:
        logger.debug("gold not enough!")
        response.res.result = False
        response.res.result_no = 50702
        return response.SerializePartialToString()

    shopdata = player.shop.get_shop_data(shop_type)
    if not shopdata:
        response.res.result = False
        return response.SerializePartialToString()

    for x in shopdata['item_ids']:
        response.id.append(x)
    for k, v in shopdata['items'].items():
        items = response.items.add()
        items.item_id = k
        items.item_num = v
    for k, v in shopdata['all_items'].items():
        all_items = response.all_items.add()
        all_items.item_id = k
        all_items.item_num = v
    for k, v in shopdata['guild_items'].items():
        guild_items = response.guild_items.add()
        guild_items.item_id = k
        guild_items.item_num = v

    response.luck_num = int(shopdata['luck_num'])
    response.refresh_times = int(shopdata['refresh_times'])
    logger.debug("response %s", response)
    tlog_action.log('RefreshShop', player, shop_type,
                    int(shopdata['refresh_times']))
    return response.SerializeToString()
Exemplo n.º 37
0
def pull_message_remote(key, character_id, args):
    oldvcharacter = VCharacterManager().get_by_id(character_id)
    logger.debug("pull_message_remote =============,args:%s", args)
    if oldvcharacter:
        if isinstance(args, tuple):
            args = (key, oldvcharacter.dynamic_id) + args + (False, )
        else:
            args = (key, oldvcharacter.dynamic_id, args, False)
        logger.debug(args)
        logger.debug(oldvcharacter.node)
        child_node = groot.child(oldvcharacter.node)
        result = child_node.callbackChild(*args)
        # logger('gate found character to pull message:%s %s %s',
        #        oldvcharacter.__dict__, args, result)
        return result
    else:
        return False
Exemplo n.º 38
0
def recharge_huawei_response():
    logger.debug('huawei recharge:%s', request.form)

    # userName = request.form['userName']
    # orderId = request.form['orderId']
    # orderTime = request.form['orderTime']
    # spending = request.form['spending']
    # accessMode = request.form['accessMode']
    # payType = request.form['payType']
    # productName = request.form['productName']
    amount = request.form['amount']
    # tradeTime = request.form['tradeTime']
    # result = request.form['result']
    # notifyTime = request.form['notifyTime']
    # sign = request.form['sign']
    requestId = request.form['requestId']
    extReserved = request.form['extReserved']

    # 验证签名
    # if sign != hashlib.md5(appid + orderSerial + cooperatorOrderSerial +
    #                        content + secretkey).hexdigest():
    #     resultCode = "10001"
    #     resultMsg = "Sign无效"
    #     print 'error:', sign, 'md5:', hashlib.md5(
    #         appid + orderSerial + cooperatorOrderSerial + content +
    #         secretkey).hexdigest()
    #     return resultMsg

    player_id = int(requestId.split('_')[0])

    oldvcharacter = VCharacterManager().get_by_id(player_id)
    if not oldvcharacter:
        logger.error('fail get player node:%s', player_id)
        return json.dumps(dict(result=3))

    child_node = GlobalObject().child(oldvcharacter.node)
    result = child_node.huawei_recharge_remote(oldvcharacter.dynamic_id,
                                               extReserved, amount, requestId,
                                               True)
    if result is True:
        logger.debug('response:success')
        return json.dumps(dict(result=0))

    logger.debug('response:failed')
    return json.dumps(dict(result=3))
Exemplo n.º 39
0
def hero_break_logic(hero_no, player, response):
    if is_not_open(player, FO_HERO_BREAK):
        return {'result': False, 'result_no': 837}
    hero = player.hero_component.get_hero(hero_no)
    hero_info = game_configs.hero_config.get(hero_no)
    break_through = game_configs.base_config.get('breakthrough')
    target_break_level = hero.break_level + 1
    logger.debug("target_break_level %s" % target_break_level)
    if target_break_level not in break_through:
        logger.debug("hero_break_logic can find target break level %s" % target_break_level)
        return {"result": False, "result_no": 10401}

    if hero.level < break_through[target_break_level][0]:
        logger.debug("hero_break_logic level is not enough %s" % hero.level)
        return {"result": False, "result_no": 10402}

    # 验证武将是否突破到上限
    if hero.break_level == hero_info.breakLimit:
        return {"result": False, "result_no": 201}

    consume_info = hero_info.get('consume' + str(hero.break_level+1))
    item_group = parse(consume_info)
    hero_info = game_configs.hero_config.get(hero.hero_no)
    # 判断是否足够
    result = is_afford(player, item_group)  # 校验
    if not result.get('result'):
        return {"result": False, "result_no": result.get('result_no')}

    # 返回消耗
    return_data = consume(player, item_group, const.HERO_BREAK)
    get_return(player, return_data, response.consume)

    for item in item_group:
        if item.item_type == 105 and item.item_no == 20006:
            hero.break_item_num += item.num
            hero.save_data()

    hero.break_level += 1
    notice_item = game_configs.notes_config.get(2003)
    if hero.break_level in notice_item.parameter1:
        push_notice(2003, player_name=player.base_info.base_name, hero_no=hero.hero_no, hero_break_level=hero.break_level)
    hero.save_data()
    # 3、返回
    tlog_action.log('HeroBreak', player, hero_no, hero.break_level)
    return {"result": True, "break_level": hero.break_level, "break_item_num": hero.break_item_num}
Exemplo n.º 40
0
def google_consume_10001(data, player):
    request = google_pb2.GoogleConsumeRequest()
    request.ParseFromString(data)
    logger.debug(request)

    player.base_info.set_google_consume_data(request.data)

    response = google_pb2.GoogleConsumeResponse()
    response.res.result = True

    data = eval(request.data)
    recharge_item = game_configs.recharge_config.get('android').get(
        data.get('productId'))
    if recharge_item is None:
        response.res.result = False
        logger.debug('google product id is not in rechargeconfig:%s',
                     data.get('productId'))

    logger.debug(response)
    return response.SerializeToString()
Exemplo n.º 41
0
def get_sign_in_1400(pro_data, player):
    """获取签到初始化信息"""
    response = GetSignInResponse()
    sign_in_component = player.sign_in_component
    logger.debug("get_sign_in %s" % sign_in_component.sign_round)
    sign_in_component.clear_sign_days()
    logger.debug("get_sign_in %s" % sign_in_component.sign_round)
    [response.days.append(i) for i in sign_in_component.sign_in_days]
    response.sign_round = sign_in_component.sign_round
    response.current_day = sign_in_component.current_day()
    [
        response.continuous_sign_in_prize.append(i)
        for i in sign_in_component.continuous_sign_in_prize
    ]
    response.repair_sign_in_times = sign_in_component.repair_sign_in_times
    [
        response.box_sign_in_prize.append(i)
        for i in sign_in_component.box_sign_in_prize
    ]
    logger.debug("get_sign_in: %s" % response)
    return response.SerializePartialToString()
Exemplo n.º 42
0
def recharge_meizu_response():
    logger.debug('meizu recharge:%s', request.form)

    # uid = request.form['uid']
    # order_id = request.form['order_id']
    # app_id = request.form['app_id']
    # sign = request.form['sign']
    # buy_amount = request.form['buy_amount']
    # create_time = request.form['create_time']
    # pay_time = request.form['pay_time']
    # trade_status = request.form['trade_status']
    # partner_id = request.form['partner_id']
    product_id = request.form['product_id']
    # pay_type = request.form['pay_type']
    # total_price = request.form['total_price']
    product_per_price = request.form['product_per_price']
    # product_unit = request.form['product_unit']
    cp_order_id = request.form['cp_order_id']
    # user_info = request.form['user_info']
    # sign_type = request.form['sign_type']
    # notify_time = request.form['notify_time']
    # notify_id = request.form['notify_id']

    player_id = int(cp_order_id.split('_')[0])

    oldvcharacter = VCharacterManager().get_by_id(player_id)
    if not oldvcharacter:
        logger.error('fail get player node:%s', player_id)
        return json.dumps(dict(code=120014, message='', value='', redirect=''))

    child_node = GlobalObject().child(oldvcharacter.node)
    result = child_node.meizu_recharge_remote(oldvcharacter.dynamic_id,
                                              product_id, product_per_price,
                                              cp_order_id, True)
    if result is True:
        logger.debug('response:success')
        return json.dumps(dict(code=200, message='', value='', redirect=''))

    logger.debug('response:failed')
    return json.dumps(dict(code=120014, message='', value='', redirect=''))
Exemplo n.º 43
0
def buy_stamina_6(request_proto, player):
    """购买体力"""
    response = CommonResponse()

    current_vip_level = player.vip_component.vip_level
    current_buy_stamina_times = player.stamina.buy_stamina_times
    current_stamina = player.stamina.stamina
    current_gold = player.finance.gold

    available_buy_stamina_times = vip_config.get(current_vip_level).get("buyStaminaMax")

    logger.debug("available_buy_stamina_times:", available_buy_stamina_times,
                 current_buy_stamina_times)
    # 校验购买次数上限
    if current_buy_stamina_times >= available_buy_stamina_times:
        response.result = False
        response.result_no = 11
        return response.SerializePartialToString()

    need_gold = base_config.get("price_buy_manual").get(current_buy_stamina_times+1)[1]
    logger.debug("need_gold++++++++++++++++", need_gold)
    # 校验金币是否不足
    if need_gold > current_gold:
        logger.debug("gold not enough++++++++++++")
        response.result = False
        response.result_no = 102
        return response.SerializePartialToString()

    player.finance.gold -= need_gold
    player.finance.save_data()

    player.stamina.buy_stamina_times += 1
    player.save_data()

    player.stamina.stamina += 120
    player.stamina.save_data()

    response.result = True
    return response.SerializePartialToString()
Exemplo n.º 44
0
def refresh_shop_items_507(pro_data, player):
    """刷新商品列表"""
    shop = GetShopItemsResponse()
    max_shop_refresh_times = player.vip_component.shop_refresh_times

    # cancel vip temprory
    # if max_shop_refresh_times <= player.soul_shop.refresh_times:
    # logger.debug("already reach refresh max!")
    #     shop.res.result = False
    #     shop.res.result_no = 501
    #     return shop.SerializePartialToString()

    price = player.soul_shop.price
    if player.finance.gold < price:
        logger.debug("gold not enough!")
        shop.res.result = False
        shop.res.result_no = 101
        return shop.SerializePartialToString()

    ids = get_shop_item_ids()
    player.soul_shop.refresh_times += 1
    player.soul_shop.last_refresh_time = int(time.time())
    player.soul_shop.save_data()

    player.finance.gold -= price
    logger.debug("refresh price:" + str(price))
    player.finance.save_data()

    logger.debug("soul ids:" + str(ids))

    for x in ids:
        shop.id.append(x)
    # save soul shop item ids
    player.soul_shop.item_ids = ids
    player.soul_shop.save_data()

    shop.res.result = True
    return shop.SerializeToString()
Exemplo n.º 45
0
def uc_recharge_remote(product_id, order_id, is_online, player):
    logger.debug('uc_recharge_remote:%s-%s', product_id, order_id)
    if player.base_info.one_dollar_flowid == order_id:
        player.base_info.one_dollar_flowid = 'done'
        logger.debug('one dollar is ok! %s', product_id)

    recharge_item = game_configs.recharge_config.get('android').get(product_id)
    if recharge_item is None:
        logger.error('not in rechargeconfig:%s', product_id)
        return False
    # if float(fee) != recharge_item.get('currence'):
    #     logger.error('recharge fee is wrong:%s-%s', fee,
    #                  recharge_item.get('currence'))
    #     return False

    response = apple_pb2.AppleConsumeVerifyResponse()
    response.res.result = True
    player.recharge.recharge_gain(recharge_item, response, 12)  # 发送奖励邮件

    remote_gate.push_object_remote(12007, response.SerializeToString(),
                                   [player.dynamic_id])
    logger.debug('uc response:%s', response)
    return True
Exemplo n.º 46
0
def fight_settlement(stage, result, player, star_num, response):
    res = response.res
    res.result = True
    stage_id = stage.stage_id

    # 校验是否保存关卡
    fight_cache_component = player.fight_cache_component
    if stage_id != fight_cache_component.stage_id:
        res.result = False
        res.message = u"关卡id和战斗缓存id不同"
        return response.SerializeToString()

    stage.settle(result, response, star_num=star_num)
    # 触发黄巾起义
    hjqy_stage_id = trigger_hjqy(player, result)
    response.hjqy_stage_id = hjqy_stage_id
    if hjqy_stage_id:
        tlog_action.log('TriggerHJQY', player, stage_id, hjqy_stage_id)
    response.battle_res = result
    response.star_num = star_num
    logger.debug("drops %s" % response.drops)
    logger.debug("star_num %s" % response.star_num)
    logger.debug("consume %s" % response.consume)
    return response.SerializePartialToString()
Exemplo n.º 47
0
    def check_time(self, resource_type):
        """docstring for _check_time"""

        item = self.get_item(resource_type)
        info = self.get_info(resource_type, self._owner)
        current_time = int(time.time())
        logger.debug("info %s" % info)
        stamina_add = 0
        if info.get("recover_period"):
            stamina_add = (current_time - item.last_gain_stamina_time) / info.get("recover_period")
        # left_stamina = (current_time - item.last_gain_stamina_time) % info.get("recover_period")
        logger.debug("stamina_add %s " % (stamina_add,))
        if self.owner.finance[resource_type] < info.get("max_value"):
            # 如果原来的超出上限,则不添加
            _value = self.owner.finance[resource_type] + int(stamina_add)
            if _value < 0:
                _value = 0
            self.owner.finance._finances[resource_type] = min(_value, info.get("max_value"))
        if int(stamina_add) > 0 or int(stamina_add) < 0:
            item.last_gain_stamina_time = current_time

        if is_next_day(time.time(), item.last_buy_stamina_time):
            item.buy_stamina_times = 0

        self._owner.finance.save_data()
        logger.debug("check_time finance %s" % self.owner.finance._finances)
        if resource_type != const.STAMINA:
            return
        # 体力相关
        tm = time.localtime(item.last_mail_day)
        dateNow = int(time.time())
        local_tm = time.localtime(dateNow)
        if local_tm.tm_year != tm.tm_year or local_tm.tm_yday != tm.tm_yday:
            item.last_mail_day = dateNow
            item.get_stamina_times = 0
            item.ClearField('contributors')
Exemplo n.º 48
0
def get_player_friend_list_1106(data, player):
    response = friend_pb2.GetPlayerFriendsResponse()
    response.open_receive = player.stamina._open_receive

    # 小伙伴支援
    player.friends.check_time()
    # if is_next_day(time.time(), player.friends.fight_last_time):
    #     # clear data in the next day
    #     player.friends.fight_times = {}
    #     player.friends.save_data()
    _update = False

    for pid in player.friends.friends + [player.base_info.id]:
        player_data = tb_character_info.getObj(pid)
        if player_data.exists():
            response_friend_add = response.friends.add()
            friend_data = player_data.hmget(['conditions_day', 'last_day'])
            response_friend_add.gift = player.friends.last_present_times(pid)

            conditions_day = friend_data.get('conditions_day', {})
            lively = conditions_day.get(24, 0)
            today = time.strftime("%Y%m%d", time.localtime(time.time()))
            if today != time.strftime(
                    "%Y%m%d", time.localtime(friend_data.get('last_day',
                                                             '0'))):
                lively = 0
            response_friend_add.current = lively
            response_friend_add.target = game_configs.base_config[
                'friendActivityValue']
            stat, update = player.friends.get_reward(pid, today)
            if update:
                _update = True
            response_friend_add.stat = stat

            # 添加好友主将的属性
            _with_battle_info(response_friend_add, player_data)
            response_friend_add.gift = player.friends.last_present_times(pid)
            response_friend_add.fight_last_time = int(
                player.friends.fight_times.get(pid, [0])[0])
            response_friend_add.fight_times = len(
                player.friends.fight_times.get(pid, []))
        else:
            logger.error('friend_list, cant find player id:%d' % pid)
            player.friends.friends.remove(pid)
    if _update:
        player.friends.save_data()

    for pid in player.friends.blacklist:
        player_data = tb_character_info.getObj(pid)
        if player_data.exists():
            response_blacklist_add = response.blacklist.add()

            # 添加好友主将的属性
            _with_battle_info(response_blacklist_add, player_data)
        else:
            logger.error('black_list cant find player id:%d' % pid)
            player.friends.blacklist.remove(pid)

    for pid in player.friends.applicant_list:
        player_data = tb_character_info.getObj(pid)
        if player_data.exists():
            response_applicant_list_add = response.applicant_list.add()

            # 添加好友主将的属性
            _with_battle_info(response_applicant_list_add, player_data)
        else:
            logger.error('applicant_list, cant find player id:%d' % pid)
            player.friends.applicant_list.remove(pid)

    logger.debug("response.friends %s" % response.friends)
    return response.SerializePartialToString()
Exemplo n.º 49
0
def fight_settlement_904(pro_data, player):
    request = stage_request_pb2.StageSettlementRequest()
    request.ParseFromString(pro_data)

    logger.debug("fight_settlement_904 id: %s player_id: %s" %
                 (player.fight_cache_component.stage_id, player.base_info.id))

    stage_id = request.stage_id
    result = request.result
    always_win = request.always_win

    # logger.debug("steps:%s", request.steps)
    # player.fight_cache_component.red_units

    stage = player.stage_component.get_stage(stage_id)
    stage_config = player.fight_cache_component._get_stage_config()
    response = stage_response_pb2.StageSettlementResponse()
    res = response.res

    check_res = (True, 1, 1, -1, {})
    if not always_win:
        if (stage_config.type not in [1, 2, 3]
                or stage.star_num != 3) and request.is_skip:
            logger.error(
                "can not be skip error!================= common stage")
            res.result = False
            res.result_no = 9041
            return response.SerializePartialToString()

        if (stage_config.type == 4 or stage.state != 1) and request.is_skip:
            logger.error("can not be skip error!=================hide stage")
            res.result = False
            res.result_no = 9041
            return response.SerializePartialToString()

        if request.is_skip and stage.state != 1:
            logger.error("can not be skip error!=================2")
            res.result = False
            res.result_no = 9041
            return response.SerializePartialToString()

        if not request.is_skip:
            check_res = pve_process_check(player, result, request.steps,
                                          const.BATTLE_PVE)

        if not request.is_skip and not check_res[0]:
            logger.error("pve_process_check error!=================")
            os.system("cp output ..")
            res.result = False
            res.result_no = 9041
            return response.SerializePartialToString()

    # 小伙伴支援消耗
    fid = player.fight_cache_component.fid
    if fid:
        player.friends.check_time()
        friend_fight_times = player.friends.fight_times
        if fid not in friend_fight_times:
            friend_fight_times[fid] = []

        supportPrice = game_configs.base_config.get('supportPrice')
        f_times = len(friend_fight_times[fid])
        price = None
        for _ in sorted(supportPrice.keys()):
            if f_times >= _:
                price = supportPrice[_]
        # todo calculate real price
        if not is_afford(player, price).get('result'):
            logger.error('stage 903 not enough money!:%s', price)
            response.res.result = False
            response.res.result_no = 101
            return response.SerializePartialToString()

        return_data = consume(player, price, const.STAGE)
        get_return(player, return_data, response.consume)

        friend_fight_times[fid].append(int(time.time()))
        player.friends.save_data()

    logger.debug("damage percent: %s" % check_res[1])
    logger.debug("red units: %s" % check_res[2])
    player.fight_cache_component.damage_percent = check_res[1]

    star = 0  # star num
    stage_info = player.fight_cache_component.stage_info
    red_units = stage_info.get('red_units')

    round_to_kill_num = check_res[4]
    red_left_num = check_res[3]
    red_left_hp_percent = check_res[2]
    death_num = len(red_units) - red_left_num
    for i in range(1, 4):
        star_condition = game_configs.base_config.get('star_condition')
        v = star_condition[i]
        if death_num >= v and red_left_num != 0:
            star = i
            break

    if request.is_skip:
        star = 3
    stage = get_stage_by_stage_type(stage_config.type, stage_id, player)
    if stage_config.type == 6 and result:
        logger.debug("it is a elite stage!")
        conditions = stage_config.ClearanceConditions
        for k, cond in conditions.items():
            logger.debug("k %s %s condi %s" % (k, type(k), cond))
            if k == 1 and (cond[0] in round_to_kill_num
                           and round_to_kill_num[cond[0]] < cond[1]):
                logger.debug("elite condition 1 is not met!")
                result = False
                break
            if k == 2 and (death_num > cond[0]):
                logger.debug("elite condition 2 is not met!")
                result = False
                break
            if k == 3 and (red_left_hp_percent < cond[0]):
                logger.debug("elite condition 3 is not met!")
                result = False
                break

    if always_win and stage_id in game_configs.stage_show_config:
        # 新手引导中的假战斗,必胜,三星
        result = True
        star = 3
    res = fight_settlement(stage, result, player, star, response)
    logger.debug("steps:%s", request.steps)
    logger.debug("fight_settlement_904 end: %s" % time.time())

    return res
Exemplo n.º 50
0
    def func():

        # 武将乱入
        fight_cache_component = player.fight_cache_component
        fight_cache_component.stage_id = stage_id
        red_units, blue_units, drop_num, monster_unpara = fight_cache_component.fighting_start(
        )

        multiple, part_multiple = get_drop_activity(
            player, player.fight_cache_component.stage_id, 1,
            stage_obj.star_num)
        for _ in range(times):
            drop = []

            drops = response.drops.add()
            low = stage_config.low
            high = stage_config.high
            drop_num = random.randint(low, high)

            for __ in range(drop_num):
                common_bag = BigBag(stage_config.commonDrop)
                common_drop = common_bag.get_drop_items()
                drop.extend(common_drop)

            fight_cache_component.get_stage_drop(stage_config, drop)

            data = gain(player,
                        drop,
                        const.STAGE_SWEEP,
                        event_id=tlog_event_id,
                        multiple=multiple,
                        part_multiple=part_multiple)
            get_return(player, data, drops)

            # 乱入武将按概率获取碎片
            break_stage_id = player.fight_cache_component.break_stage_id
            if break_stage_id:
                break_stage_info = game_configs.stage_break_config.get(
                    break_stage_id)
                ran = random.random()
                if ran <= break_stage_info.reward_odds:
                    # logger.debug("break_stage_info=============%s %s" % (break_stage_info.reward, 1))
                    data = gain(player, break_stage_info.reward,
                                const.STAGE_SWEEP)
                    get_return(player, data, drops)

            player.finance.consume(const.STAMINA, stage_config.vigor,
                                   const.STAGE_SWEEP)
            # 经验
            for (slot_no, lineUpSlotComponent
                 ) in player.line_up_component.line_up_slots.items():
                hero = lineUpSlotComponent.hero_slot.hero_obj
                if hero:

                    beforelevel = hero.level
                    hero.upgrade(stage_config.HeroExp, player.base_info.level)
                    afterlevel = hero.level
                    changelevel = afterlevel - beforelevel
                    hero.save_data()
                    if changelevel:
                        tlog_action.log('HeroUpgrade', player, hero.hero_no,
                                        changelevel, afterlevel, 3, 0, 0, 0, 0)
            # 玩家金钱
            player.finance.coin += stage_config.currency
            # 玩家经验
            player.base_info.addexp(stage_config.playerExp, const.STAGE_SWEEP)
        # 更新等级相关属性
        player.set_level_related()

        # hook task
        hook_task(player, CONDITIONId.ANY_STAGE, times)
        logger.debug("sweep time %s %s" % (times, sweep_item))
        return_data = consume(player,
                              sweep_item,
                              const.STAGE_SWEEP,
                              multiple=times)
        get_return(player, return_data, response.consume)

        player.stage_component.get_stage(stage_id).attacks += times
        player.stage_component.save_data()

        player.stamina.save_data()
        player.base_info.save_data()
        player.finance.save_data()
Exemplo n.º 51
0
def stage_start_903(pro_data, player):
    """pve开始战斗
    """
    request = stage_request_pb2.StageStartRequest()
    request.ParseFromString(pro_data)

    stage_id = request.stage_id  # 关卡编号
    line_up = request.lineup  # 阵容顺序
    red_best_skill_id = request.unparalleled  # 无双编号
    fid = request.fid  # 好友ID

    # logger.debug("red_best_skill_id,%s" % red_best_skill_id)
    # logger.debug("fid,%s" % fid)
    response = stage_response_pb2.StageStartResponse()
    player.fight_cache_component.stage_id = stage_id
    stage_config = player.fight_cache_component._get_stage_config()
    not_open = False
    if stage_config.type == 6:  # 精英
        not_open = is_not_open(player, FO_ELI_STAGE)
    if stage_config.type in [4, 5]:  # 活动
        not_open = is_not_open(player, FO_ACT_STAGE)
    if not_open:
        response.res.result = False
        response.res.result_no = 837
        return response.SerializeToString()

    stage_info = pve_process(stage_id, stage_config.type, line_up, fid, player)
    result = stage_info.get('result')

    res = response.res
    res.result = result

    if not result:
        # logger.info('进入关卡返回数据:%s', response)
        res.result_no = stage_info.get('result_no')
        return response.SerializePartialToString()

    red_units = stage_info.get('red_units')
    blue_groups = stage_info.get('blue_units')
    drop_num = stage_info.get('drop_num')
    blue_skill = stage_info.get('monster_unpara')
    f_unit = stage_info.get('f_unit')

    pve_assemble_units(red_units, blue_groups, response)
    pve_assemble_friend(f_unit, response)
    if blue_skill:
        response.monster_unpar = blue_skill
    response.hero_unpar = 0
    response.hero_unpar_level = 0

    response.drop_num = drop_num

    seed1, seed2 = get_seeds()
    player.fight_cache_component.seed1 = seed1
    player.fight_cache_component.seed2 = seed2
    player.fight_cache_component.red_best_skill_id = red_best_skill_id
    player.fight_cache_component.stage_info = stage_info
    response.seed1 = seed1
    response.seed2 = seed2

    if f_unit:
        player.fight_cache_component.fid = fid
    else:
        player.fight_cache_component.fid = 0

    player.fight_cache_component.red_best_skill_id = 0
    logger.debug(response)
    return response.SerializePartialToString()
Exemplo n.º 52
0
def deal_random_1829(pro_data, player):
    """处理随机出来的倍数,领取或者放弃
    """
    request = stage_request_pb2.DealRandomRequest()
    request.ParseFromString(pro_data)
    chapter_id = request.chapter_id

    response = stage_response_pb2.DealRandomResponse()

    chapters_info = get_chapter_info(chapter_id, player)
    if len(chapters_info) != 1 or chapter_id == 1 or len(
            chapters_info[0].award_info) == 0:
        logger.error(
            "deal_random_1829,chapter_info dont find, chapter_id == 1")
        response.res.result = False
        response.res.result_no = 800
        return response.SerializePartialToString()
    else:
        chapter_obj = chapters_info[0]

    chapter_conf = chapter_obj.get_conf()
    chapter_obj.update(player.stage_component.calculation_star(chapter_id))

    if chapter_obj.star_gift != 3 or chapter_obj.random_gift_times == 0:
        response.res.result = False
        response.res.result_no = 800
        logger.error(
            "deal_random_1829, chapter_obj.star_gift != 3 or chapter_obj.random_gift_times == 0"
        )
        return response.SerializePartialToString()

    drop_num = game_configs.lottery_config.get(
        chapter_obj.now_random).Magnification

    if request.res == 1:

        return_data = gain(player,
                           chapter_conf.dragonGift,
                           const.STAGE_STAR_GIFT,
                           multiple=drop_num)  # 获取

        return_data1 = []
        for rd in return_data:
            if not return_data1:
                return_data1.append(return_data[0])
            else:
                return_data1[0][1] += rd[1]

        get_return(player, return_data1, response.drops)
        chapter_obj.star_gift = 1
    else:  # res 为2, 放弃
        random_num_conf = game_configs.lottery_config.get(
            chapter_obj.now_random)
        if not random_num_conf.Probability:
            # 已经达到最大值
            response.res.result = False
            response.res.result_no = 800
            logger.error("get_star_random_1828, now_random  max")
            return response.SerializePartialToString()
        chapter_obj.star_gift = 2

    tlog_action.log('DealStarRandom', player, chapter_obj.now_random,
                    request.res, chapter_id)
    player.stage_component.save_data()

    response.res.result = True
    logger.debug(response)
    return response.SerializeToString()
Exemplo n.º 53
0
def get_star_random_1828(pro_data, player):
    """取得满星抽奖随机倍数
    """
    request = stage_request_pb2.GetStarRandomRequest()
    request.ParseFromString(pro_data)
    chapter_id = request.chapter_id

    response = stage_response_pb2.GetStarRandomResponse()

    chapters_info = get_chapter_info(chapter_id, player)
    chapter_obj = chapters_info[0]
    chapter_conf = chapter_obj.get_conf()
    chapter_obj.update(player.stage_component.calculation_star(chapter_id))

    if not chapter_conf.starMagnification or len(
            chapters_info[0].award_info) == 0:
        logger.error(
            "get_star_random_1828, not chapter_conf.starMagnification or len(chapters_info[0].award_info) == 0"
        )
        response.res.result = False
        response.res.result_no = 831
        return response.SerializePartialToString()

    if chapter_obj.star_gift == 1:
        response.res.result = False
        response.res.result_no = 800
        logger.error("get_star_random_1828, alreaday get gift")
        return response.SerializePartialToString()

    # chapter_obj.random_gift_times
    if not chapter_obj.now_random:
        chapter_obj.now_random = chapter_conf.starMagnification

    random_num_conf = game_configs.lottery_config.get(chapter_obj.now_random)
    if not random_num_conf.Probability:
        # 已经达到最大值
        response.res.result = False
        response.res.result_no = 800
        logger.error("get_star_random_1828, now_random  max")
        return response.SerializePartialToString()
    need_gold = game_configs.base_config.\
        get('LotteryPrice')[chapter_obj.random_gift_times]
    if need_gold > player.finance.gold:
        response.res.result = False
        response.res.result_no = 102
        return response.SerializeToString()

    def func():
        random_num = 10005
        if not request.is_newbee:
            random_num = do_get_star_random(random_num_conf)
        response.random_num = random_num
        chapter_obj.now_random = random_num
        chapter_obj.random_gift_times += 1
        chapter_obj.star_gift = 3
        player.stage_component.save_data()
        tlog_action.log('StarRandom', player, random_num,
                        chapter_obj.random_gift_times, chapter_id)

    player.pay.pay(need_gold, const.STAGE_STAR_GIFT, func)

    response.res.result = True
    logger.debug(response)
    return response.SerializeToString()
Exemplo n.º 54
0
def hero_sacrifice_oper(heros, player):
    """
    武将献祭,返回总武魂、经验药水
    :param heros: 被献祭的武将
    :return total_hero_soul:总武魂数量, exp_item_no:经验药水编号, exp_item_num:经验药水数量
    """
    total_exp = 0
    exp_item_no = 0
    exp_item_num = 0
    awake_item_no = 90001
    awake_item_num = 0
    break_item_no = 20006
    break_item_num = 0

    response = hero_response_pb2.HeroSacrificeResponse()
    if is_not_open(player, FO_HERO_SACRIFICE):
        response.res.result = False
        response.res.result_no = 837
        return response
    gain_response = response.gain
    for hero in heros:
        sacrifice_gain = game_configs.hero_config.get(hero.hero_no).sacrificeGain
        return_data = gain(player, sacrifice_gain, const.HERO_SACRIFICE_OPER)
        get_return(player, return_data, gain_response)
        # 经验
        exp = hero.get_all_exp()
        total_exp += exp
        tlog_action.log('HeroSacrifice', player, hero.hero_no)
        # 觉醒丹
        awake_item_num += hero.awake_item_num
        # 突破丹
        break_item_num += hero.break_item_num

    # baseconfig {1000000: 'item_id'}

    logger.debug("total_exp %s" % total_exp)
    formula_info = game_configs.formula_config.get("sacrificeExp_3")
    pre_formula = formula_info.get("precondition")
    formula = formula_info.get("formula")
    cal_vars = dict(expHero=total_exp)
    if eval(pre_formula, cal_vars):
        exp_item_no = 10003
        exp_item_num = eval(formula, cal_vars)
    formula_info = game_configs.formula_config.get("sacrificeExp_2")
    pre_formula = formula_info.get("precondition")
    formula = formula_info.get("formula")
    cal_vars = dict(expHero=total_exp)
    if eval(pre_formula, cal_vars):
        exp_item_no = 10002
        exp_item_num = eval(formula, cal_vars)
    formula_info = game_configs.formula_config.get("sacrificeExp_1")
    pre_formula = formula_info.get("precondition")
    formula = formula_info.get("formula")
    cal_vars = dict(expHero=total_exp)
    if eval(pre_formula, cal_vars):
        exp_item_no = 10001
        exp_item_num = eval(formula, cal_vars)
    heroAwakeBack = game_configs.base_config.get('heroAwakeBack')
    heroBreakBack = game_configs.base_config.get('heroBreakBack')
    awake_item_num = int(awake_item_num * heroAwakeBack)
    break_item_num = int(break_item_num * heroBreakBack)

    player.item_package.add_item(Item(exp_item_no, exp_item_num))
    player.item_package.add_item(Item(awake_item_no, awake_item_num))
    player.item_package.add_item(Item(break_item_no, break_item_num))
    player.item_package.save_data()
    if exp_item_no:
        item_pb = gain_response.items.add()
        item_pb.item_no = exp_item_no
        item_pb.item_num = exp_item_num
    if awake_item_num:
        item_pb = gain_response.items.add()
        item_pb.item_no = awake_item_no
        item_pb.item_num = awake_item_num
    if break_item_num:
        item_pb = gain_response.items.add()
        item_pb.item_no = break_item_no
        item_pb.item_num = break_item_num
    response.res.result = True
    # print "*"*80
    # print response
    return response
Exemplo n.º 55
0
def trigger_hjqy(player, result, times=1):
    """docstring for trigger_hjqy 触发黄巾起义
    return: stage id
    """
    if is_not_open(player, FO_HJQY_STAGE):
        return 0
    # 如果战败则不触发
    if not result:
        return 0
    logger.debug("trigger_hjqy")
    # 活动是否开启
    if player.base_info.is_firstday_from_register(const.OPEN_FEATURE_HJQY):
        logger.debug("hjqy have not open.")
        return 0

    # 如果已经触发过hjqy,则不触发
    if not remote_gate['world'].is_can_trigger_hjqy_remote(
            player.base_info.id):
        return 0

    stage_info = player.fight_cache_component._get_stage_config()
    if stage_info.type not in [1, 2, 3]:
        # 只有在剧情关卡时,才能触发黄巾起义
        return 0
    logger.debug(stage_info.chapter)
    logger.debug(stage_info.type)
    logger.debug(stage_info.id)

    logger.debug("can_trigger_hjqy")
    # 触发hjqy
    open_stage_id = player.stage_component.stage_progress
    player.fight_cache_component.stage_id = open_stage_id
    stage_info = player.fight_cache_component._get_stage_config()

    #rate = 0.01 # for test
    hjqytrigger = game_configs.base_config.get("hjqytrigger")
    hjqyRandomCheckpoint = game_configs.base_config.get("hjqyRandomCheckpoint")
    rate = 1
    for i in range(times):
        rate = random.random()
        if rate <= hjqytrigger[0]:
            break
    logger.debug("rate: %s, hjqytrigger:%s" % (rate, hjqytrigger))
    if rate > hjqytrigger[0]:
        return 0

    info = {}
    for i in range(1, 4):
        info[i] = hjqytrigger[i]

    stage_index = random_pick_with_weight(info)

    logger.debug(
        "chapter: %s, stage_index: %s, stage_id: %s, open_stage_id: %s" %
        (stage_info.chapter, stage_index,
         player.fight_cache_component.stage_id, open_stage_id))

    if stage_info.chapter not in hjqyRandomCheckpoint:
        return 0

    stage_id = hjqyRandomCheckpoint.get(stage_info.chapter)[stage_index - 1]

    monster_lv = hjqyRandomCheckpoint.get(stage_info.chapter)[3]

    hjqyRule2 = game_configs.base_config.get("hjqyRule2")
    if monster_lv - player.base_info.level > hjqyRule2:
        logger.debug("monster_lv %s, player.base_info.level %s, hjqyRule2 %s" %
                     (monster_lv, player.base_info.level, hjqyRule2))
        if (stage_info.chapter - 1) not in hjqyRandomCheckpoint:
            return 0
        stage_id = hjqyRandomCheckpoint.get(stage_info.chapter -
                                            1)[stage_index - 1]

    player.fight_cache_component.stage_id = stage_id

    blue_units = player.fight_cache_component._assemble_monster()

    str_blue_units = cPickle.dumps(blue_units[0])
    result = remote_gate['world'].create_hjqy_remote(
        player.base_info.id, player.base_info.base_name, str_blue_units,
        stage_id)
    logger.debug("8============= %s %s" % (stage_id, open_stage_id))
    if not result:
        return 0
    # send trigger reward
    hjqyOpenReward = game_configs.base_config.get("hjqyOpenRewardID")
    send_mail(conf_id=hjqyOpenReward, receive_id=player.base_info.id)

    return stage_id
Exemplo n.º 56
0
def do_hero_awake(player, hero_no, awake_item_num, response):
    """docstring for do_hero_awake"""
    if is_not_open(player, FO_HERO_AWAKE):
        return {'result': False, 'result_no': 837}

    hero = player.hero_component.get_hero(hero_no)
    if not hero:
        logger.error("hero not exist! hero_no %s" % hero_no)
        return {'result': False, 'result_no': 11901}

    awake_info = game_configs.awake_config.get(hero.awake_level)
    logger.debug("hero.awake_level %s, hero_no %s, awake_item_num %s" % (hero.awake_level, hero_no, awake_item_num))

    singleConsumption = awake_info.singleConsumption
    logger.debug("singleConsumption %s" % singleConsumption)
    singleCoin = awake_info.silver

    if not is_afford(player, singleConsumption).get("result"):
        logger.error("singleConsumption is not afford!")
        return {'result': False, 'result_no': 11902}

    if not is_afford(player, singleCoin).get("result"):
        logger.error("singleCoin is not afford!")
        return {'result': False, 'result_no': 11903}

    if hero.awake_level >= 10:
        logger.error("the hero has reached the max awake level!")
        return {'result': False, 'result_no': 11904}

    singleConsumptionNum = singleConsumption[0].num
    left_awake_item = awake_item_num


    before_num = hero.awake_item_num

    while left_awake_item >= singleConsumptionNum:
        # consume
        if not is_afford(player, singleConsumption) or \
            not is_afford(player, singleCoin):
                break
        return_data1 = consume(player, singleConsumption, const.HERO_AWAKE)
        return_data2 = consume(player, singleCoin, const.HERO_AWAKE)
        get_return(player, return_data1, response.consume)
        get_return(player, return_data2, response.consume)

        # record awake item num
        hero.awake_item_num += singleConsumptionNum

        # trigger or not, add exp, add level
        exp_percent = hero.awake_exp * 1.0 / awake_info.experience
        is_trigger = False
        for k in sorted(awake_info.triggerProbability.keys(), reverse=True):
            if exp_percent > k:
                v = awake_info.triggerProbability[k]
                target_percent = random.uniform(v[0], v[1])
                if random.random() < target_percent:
                    is_trigger = True
                    break

        if is_trigger:  # 触发满级概率
            logger.debug("is_trigger!")
            hero.awake_exp = 0
            hero.awake_level += 1
            break
        else:
            logger.debug("not is_trigger!")
            hero.awake_exp += singleConsumptionNum
            if hero.awake_exp >= awake_info.experience:
                hero.awake_exp = hero.awake_exp - awake_info.experience
                hero.awake_level += 1

        left_awake_item -= singleConsumptionNum

    # actual_consume_item_num = 0
    hero.save_data()
    response.awake_level = hero.awake_level
    response.awake_exp = hero.awake_exp
    response.awake_item_num = hero.awake_item_num
    use_num = hero.awake_item_num - before_num
    tlog_action.log('HeroAwake', player, hero_no, use_num, hero.awake_level-1)

    return {'result': True}
Exemplo n.º 57
0
def enhance_equipment(equipment_id, enhance_type, player):
    """装备强化
    @param dynamic_id:  客户端动态ID
    @param equipment_id: 装备ID
    @param enhance_type: 强化类型
    @param kwargs:
    @return:
    """
    if is_not_open(player, FO_EQUIP_ENHANCE):
        return {"result": False, "result_no": 837}

    equipment_obj = player.equipment_component.get_equipment(equipment_id)
    # print equipment_obj, "equipment_obj"

    if enhance_type == 2 and not player.base_info.equipment_strength_one_key:
        logger.debug('enhance_equipment_vip_error!%d' %
                     player.base_info.equipment_strength_one_key)
        return {'result': False, 'result_no': 403, 'message': u''}

    if not equipment_obj:
        logger.debug('enhance_equipment_no_equipment!')
        return {'result': False, 'result_no': 401, 'message': u''}

    enhance_record = []

    curr_coin = player.finance.coin  # 用户金币
    # curr_coin = 1000000
    enhance_cost = equipment_obj.attribute.enhance_cost  # 强化消耗
    if not enhance_cost or curr_coin < enhance_cost:
        return {'result': False, 'result_no': 101, 'message': u''}

    strength_max = equipment_obj.strength_max(player)
    current_strength_lv = equipment_obj.attribute.strengthen_lv

    if strength_max <= current_strength_lv:
        return {'result': False, 'result_no': 402, 'message': u''}

    num = 0
    if enhance_type == 1:
        result = __do_enhance(player, equipment_obj)
        if result.get('record')[1] >= strength_max:
            result['record'] = (result.get('record')[0], strength_max,
                                result.get('record')[2])
        enhance_record.append(result.get('record'))
        num += 1
    else:
        while strength_max > current_strength_lv and curr_coin > enhance_cost:
            num += 1
            result = __do_enhance(player, equipment_obj)
            if not result.get('result'):
                return result

            if result.get('record')[1] >= strength_max:
                result['record'] = (result.get('record')[0], strength_max,
                                    result.get('record')[2])
                enhance_record.append(result.get('record'))
                break
            enhance_record.append(result.get('record'))
            current_strength_lv = equipment_obj.attribute.strengthen_lv
            enhance_cost = equipment_obj.attribute.enhance_cost  # 强化消耗
            curr_coin = player.finance.coin  # 用户金币

    print equipment_obj.enhance_record
    equipment_obj.enhance_record.enhance_record.extend(enhance_record)

    # 保存
    equipment_obj.save_data()
    player.finance.save_data()

    return {
        'result': True,
        'enhance_record': enhance_record,
        'num': num,
        'equipment_no': equipment_obj.base_info.equipment_no
    }
Exemplo n.º 58
0
def gain(player, item_group, reason,
         result=None,
         multiple=1,
         event_id='',
         part_multiple=[],
         lucky_attr_id=0):
    """获取
    @param item_group: [obj,obj]
    act 掉落翻倍. [[type_ids], xs]  [[翻倍类型列表],系数]
    """
    if result is None:
        result = []
    after_num = 0
    itid = 0

    for group_item in item_group:
        type_id = group_item.item_type

        num = int(group_item.num * multiple)
        item_no = group_item.item_no

        multiple2 = 1
        for _part_multiple in part_multiple:
            _times = _part_multiple["times"]
            _item_type = _part_multiple["item_type"]
            _item_ids = _part_multiple["item_ids"]
            if type_id == _item_type:
                if not _item_ids[0] or item_no in _item_ids:
                    multiple2 = _times

        logger.debug("multiple %s multiple2 %s" % (multiple, multiple2))
        num = int(multiple2 * num)

        front_type_id = type_id # 记录类型,用于武将已存在的情况。
        if type_id == const.COIN:
            player.finance.coin += num
            player.finance.save_data()
            after_num = player.finance.coin

        elif type_id == const.RESOURCE:
            if item_no == 27:
                hook_task(player, CONDITIONId.GGZJ, num)
            elif item_no == const.TEAM_EXPERIENCE:
                player.base_info.addexp(num, reason)
                player.base_info.save_data()
                after_num = player.base_info.exp
            else:
                player.finance.add(item_no, num)
                player.finance.save_data()
                after_num = player.finance[item_no]

            if item_no == 1 or item_no == 2:
                tlog_action.log('MoneyFlow', player, after_num, num, reason,
                                const.ADD, item_no)

        elif type_id == const.GOLD:
            player.finance.add_gold(num, 0)
            player.finance.save_data()

        elif type_id == const.HERO_SOUL:
            player.finance.hero_soul += num
            player.finance.save_data()

        elif type_id == const.PVP:
            player.finance.pvp_score += num
            player.finance.save_data()

        elif type_id == const.HERO_CHIP:
            if game_configs.chip_config.get('chips').get(item_no):
                hero_chip = HeroChip(item_no, num)
                player.hero_chip_component.add_chip(hero_chip)
                player.hero_chip_component.save_data()
                after_num = player.hero_chip_component.get_chip(item_no).num
            else:
                logger.error('chip config not found:%', item_no)

        elif type_id == const.ITEM:
            item = Item(item_no, num)
            player.item_package.add_item(item)
            player.item_package.save_data()
            after_num = player.item_package.get_item(item_no).num

        elif type_id == const.HERO:
            is_have = player.hero_component.contain_hero(item_no)
            if not is_have:
                num -= 1
            if num != 0:
                # 已经存在该武将,自动转换为武将碎片
                # 获取hero对应的hero_chip_no, hero_chip_num
                hero_chip_config_item = game_configs.chip_config.get("mapping").get(item_no)
                hero_chip_no = hero_chip_config_item.id
                CardImparirment = 1
                if reason == const.SHOP_DRAW_HERO:
                    CardImparirment = game_configs.base_config.get("CardImparirment")
                hero_chip_num = int(hero_chip_config_item.needNum * num * CardImparirment)

                hero_chip = HeroChip(hero_chip_no, hero_chip_num)
                player.hero_chip_component.add_chip(hero_chip)
                player.hero_chip_component.save_data()
                after_num = player.hero_chip_component.get_chip(hero_chip_no).num

                result.append([const.HERO_CHIP, hero_chip_num, hero_chip_no])

                tlog_action.log('ItemFlow', player, const.ADD, type_id,
                                hero_chip_num, hero_chip_no, itid, reason,
                                after_num, event_id)
            if not is_have:
                hero = player.hero_component.add_hero(item_no)
                notice_item = game_configs.notes_config.get(2002)
                logger.debug("=================%s %s %s" % (reason, hero.hero_info.quality, notice_item.parameter1))
                if reason == const.SHOP_DRAW_HERO and hero.hero_info.quality in notice_item.parameter1:
                    push_notice(2002, player_name=player.base_info.base_name, hero_no=item_no)
                after_num = 1

                result.append([type_id, 1, item_no])

                tlog_action.log('ItemFlow', player, const.ADD, type_id,
                                1, item_no, itid, reason,
                                after_num, event_id)

        elif type_id == const.BIG_BAG:
            big_bag = BigBag(item_no)
            for i in range(num):
                temp = big_bag.get_drop_items()
                gain(player, temp, reason, result)
            return result

        elif type_id == const.EQUIPMENT:
            for _ in range(num):
                itid = item_no
                equipment = player.equipment_component.add_equipment(itid, lucky_attr_id)
                equ_item_no = equipment.base_info.id
                after_num = player.equipment_component.get_equipment_num(itid)
                notice_item = game_configs.notes_config.get(2004)
                if reason == const.COMMON_BUY_PVP and equipment.equipment_config_info.quality in notice_item.parameter1:
                    push_notice(2004, player_name=player.base_info.base_name, equipment_no=itid)

                notice_item = game_configs.notes_config.get(2005)
                if reason ==const.COMMON_BUY_MELT and equipment.equipment_config_info.quality in notice_item.parameter1:
                    push_notice(2005, player_name=player.base_info.base_name, equipment_no=itid)

                notice_item = game_configs.notes_config.get(2006)
                if reason == const.COMMON_BUY_EQUIPMENT and equipment.equipment_config_info.quality in notice_item.parameter1:
                    push_notice(2006, player_name=player.base_info.base_name, equipment_no=itid)

                result.append([type_id, 1, equ_item_no])
                tlog_action.log('ItemFlow', player, const.ADD, type_id, 1,
                                itid, item_no, reason, after_num, event_id)

        elif type_id == const.EQUIPMENT_CHIP:
            if game_configs.chip_config.get('chips').get(item_no):
                chip = EquipmentChip(item_no, num)
                player.equipment_chip_component.add_chip(chip)
                player.equipment_chip_component.save_data()
                after_num = player.equipment_chip_component.get_chip(item_no).chip_num
            else:
                logger.error('chip config not found:%', item_no)

        elif type_id == const.STAMINA:
            player.stamina.stamina += num
            # logger.debug(str(num)+" , stamina+++++++++++")
            player.stamina.save_data()

        elif type_id == const.TEAM_EXPERIENCE:
            player.base_info.addexp(num, reason)
            player.base_info.save_data()

        elif type_id == const.TRAVEL_ITEM:
            after_num = num
            stage_id = game_configs.travel_item_config.get('items').get(item_no).stageId
            flag1 = 1
            flag2 = 0
            stage_item_info = player.travel_component.travel_item.get(stage_id)
            for [travel_item_id, travel_item_num] in stage_item_info:
                if travel_item_id == item_no:
                    the_num = travel_item_num + num
                    stage_item_info[flag2] = \
                        [travel_item_id, the_num]
                    flag1 = 0
                    after_num = the_num
                    break
                flag2 += 1
            if flag1:
                stage_item_info.append([item_no, num])
            player.travel_component.save()

        elif type_id == const.RUNT:
            for _ in range(num):
                runt_id = player.runt.add_runt(item_no)
                result.append([type_id, 1, runt_id])
            player.runt.save()
            after_num = player.runt.get_runt_num(item_no)

        if type_id == const.COIN or type_id == const.GOLD:
            tlog_action.log('MoneyFlow', player, after_num, num, reason,
                            const.ADD, item_no)

        is_over = False       # 是否累加
        for i in result:
            if i[0] == type_id and i[2] == item_no and (front_type_id != const.HERO and type_id != const.HERO_CHIP and type_id != const.RUNT and type_id != const.EQUIPMENT and type_id != const.HERO):
                i[1] += num
                is_over = True
                continue

        if not is_over and type_id !=const.RUNT and type_id != const.HERO and type_id != const.EQUIPMENT:
            result.append([type_id, num, item_no])

        # ====tlog======
        if type_id != const.TEAM_EXPERIENCE and type_id != const.EQUIPMENT and type_id != const.HERO:
            tlog_action.log('ItemFlow', player, const.ADD, type_id, num,
                            item_no, itid, reason, after_num, event_id)
        # ==============

    return result
Exemplo n.º 59
0
def hjqy_rank_remote(player_id):
    """ 获取玩家伤害排名
    """
    rank = hjqy_manager.get_rank(player_id)
    logger.debug("hjqy_rank_remote:%s" % rank)
    return rank
Exemplo n.º 60
0
def hjqy_damage_hp_remote(player_id):
    """ 获取玩家伤害信息
    """
    damage_hp = hjqy_manager.get_damage_hp(player_id)
    logger.debug("hjqy_damage_hp_remote : %s" % damage_hp)
    return damage_hp