예제 #1
0
파일: stage.py 프로젝트: Cuick/traversing
    def settle(self, result, response, star_num=0):
        """
        战斗结算
        """
        player = self._player
        stage_id = self._stage_id
        conf = self.get_stage_config()

        # todo: 更新战斗次数
        # 体力
        if result:

            #player.stamina.stamina -= conf.vigor
            player.finance.consume(const.STAMINA, conf.vigor, const.STAGE)
            player.finance.save_data()
            player.stamina.save_data()

            # 活跃度
            # 结算
            stage_util.settle(player,
                              result,
                              response,
                              conf,
                              star_num=star_num)
            # hook task
            hook_task(player, CONDITIONId.ANY_STAGE, 1)
            hook_task(player, CONDITIONId.STAGE, stage_id)

            # 更新 七日奖励
            target_update(player, [45])

            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 1)
        else:
            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 0)
예제 #2
0
파일: mine.py 프로젝트: Cuick/traversing
def settle_1252(data, player):
    request = mine_pb2.MineSettleRequest()
    response = common_pb2.CommonResponse()
    request.ParseFromString(data)
    pos = request.pos
    result = request.result
    is_pvp = player.mine.is_pvp(pos)  # 根据矿所在位置判断pve or pvp
    logger.debug("pos %s, mine_info %s" % (pos, is_pvp))
    pve_check_result = pve_process_check(player,
                                         result,
                                         request.steps,
                                         const.BATTLE_MINE_PVE)
    if is_pvp is False and not pve_check_result:
        logger.error("mine pve_process_check error!!!!!")
        res = response.res
        res.result = False
        res.result_no = 9041
        return response.SerializePartialToString()
    # todo: set settle time to calculate acc_mine
    process_mine_result(player, pos, result, None, 0, 1)
    # 7日奖励 占领矿点
    mine_id = player.mine._mine[pos].get("mine_id")
    mine_item = game_configs.mine_config.get(mine_id)
    logger.debug("mine_id %s mine_item %s" % (mine_id, mine_item))
    if mine_item:
        player.act.mine_win(mine_item.quality)
        target_update(player, [57])

    response.result = True
    return response.SerializePartialToString()
예제 #3
0
    def change_hero(self, slot_no, hero_no, change_type):
        """更换阵容主将
        @param slot_no:
        @param hero_no:
        @:param change_type: 0:阵容  1:助威
        @return:
        """
        if not change_type:
            slot_obj = self._line_up_slots.get(slot_no)
        else:
            slot_obj = self._sub_slots.get(slot_no)

        origin_hero_no = slot_obj.hero_slot.hero_no
        origin_hero = self.owner.hero_component.get_hero(origin_hero_no)
        if origin_hero:
            origin_hero.is_online = False
        else:
            origin_hero_no = 0
        slot_obj.change_hero(hero_no)
        if hero_no == 0 and slot_no == self.caption_pos:
            # 队长下阵,更改队长
            self.remove_caption_hero()

        target_hero = self.owner.hero_component.get_hero(hero_no)
        if hero_no != 0:
            assert target_hero != None, "change hero can not be None!"
            target_hero.is_online = True

            # 更新 七日奖励
            target_update(self.owner, [55])

        tlog_action.log('LineUpChange', self.owner, slot_no, origin_hero_no,
                        hero_no, change_type)
예제 #4
0
    def change_hero(self, slot_no, hero_no, change_type):
        """更换阵容主将
        @param slot_no:
        @param hero_no:
        @:param change_type: 0:阵容  1:助威
        @return:
        """
        if not change_type:
            slot_obj = self._line_up_slots.get(slot_no)
        else:
            slot_obj = self._sub_slots.get(slot_no)

        origin_hero_no = slot_obj.hero_slot.hero_no
        origin_hero = self.owner.hero_component.get_hero(origin_hero_no)
        if origin_hero:
            origin_hero.is_online = False
        else:
            origin_hero_no = 0
        slot_obj.change_hero(hero_no)
        if hero_no == 0 and slot_no == self.caption_pos:
            # 队长下阵,更改队长
            self.remove_caption_hero()

        target_hero = self.owner.hero_component.get_hero(hero_no)
        if hero_no != 0:
            assert target_hero != None, "change hero can not be None!"
            target_hero.is_online = True

            # 更新 七日奖励
            target_update(self.owner, [55])

        tlog_action.log('LineUpChange', self.owner, slot_no, origin_hero_no,
                        hero_no, change_type)
예제 #5
0
파일: stage.py 프로젝트: wyjstar/traversing
    def settle(self, result, response, star_num=0):
        """
        战斗结算
        """
        player = self._player
        stage_id = self._stage_id
        conf = self.get_stage_config()

        # todo: 更新战斗次数
        # 体力
        if result:

            #player.stamina.stamina -= conf.vigor
            player.finance.consume(const.STAMINA, conf.vigor, const.STAGE)
            player.finance.save_data()
            player.stamina.save_data()

            # 活跃度
            # 结算
            stage_util.settle(player, result, response, conf, star_num=star_num)
            # hook task
            hook_task(player, CONDITIONId.ANY_STAGE, 1)
            hook_task(player, CONDITIONId.STAGE, stage_id)

            # 更新 七日奖励
            target_update(player, [45])

            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 1)
        else:
            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 0)
예제 #6
0
def one_key_hero_upgrade_with_item_120(data, player):
    """阵容界面武将一键升级"""
    args = hero_request_pb2.HeroRequest()
    args.ParseFromString(data)
    response = hero_response_pb2.OneKeyHeroUpgradeRespone()
    hero_no = args.hero_no
    # 服务器验证
    res = one_key_hero_upgrade_logic(hero_no, player)
    if not res.get("result"):
        response.res.result = res.get("result")
        response.res.result_no = res.get("result_no")
        return response.SerializeToString()
    # 返回
    hero = res.get("hero")
    response.res.result = True
    response.level = hero.level
    response.exp = hero.exp
    response.exp_item_num.append(res.get('small_exp_num'))
    response.exp_item_num.append(res.get('middle_exp_num'))
    response.exp_item_num.append(res.get('big_exp_num'))
    # 更新 七日奖励
    target_update(player, [55])
    # logger.debug(res)
    # logger.debug(response)
    return response.SerializeToString()
예제 #7
0
def change_equipment(slot_no, no, equipment_id, player):
    """
    @param dynamic_id: 动态ID
    @param slot_no: 阵容位置
    @param no: 装备位置
    @param equipment_id: 装备ID
    @return:
    """
    # logger.debug("change equipment id %s %s %s", slot_no, no, equipment_id)
    if is_not_open(player, FO_CHANGE_EQUIPMENT):
        return {"result": False, "result_no": 837}

    # 检验装备是否存在
    if equipment_id != '0' and not check_have_equipment(player, equipment_id):
        logger.debug("1check_have_equipment %s", equipment_id)
        return {"result": False, "result_no": 702}

    # 校验该装备是否已经装备
    if equipment_id != '0' and equipment_id in player.line_up_component.on_equipment_ids:
        logger.debug("2check_have_equipment")
        return {"result": False, "result_no": 703}

    # 校验装备类型
    if not player.line_up_component.change_equipment(slot_no, no, equipment_id):
        logger.debug("3check_have_equipment")
        return {"result": False, "result_no": 704}
    player.line_up_component.save_data()
    # 更新 七日奖励
    target_update(player, [55])
    return {"result": True}
예제 #8
0
def runt_set_841(data, player):
    """镶嵌符文"""
    args = RuntSetRequest()
    args.ParseFromString(data)
    hero_no = args.hero_no
    runt_type = args.runt_type
    runt_set_infos = args.runt_set_info

    response = RuntSetResponse()
    if is_not_open(player, FO_RUNT_ADD):
        response.res.result = False
        response.res.result_no = 837
        return response.SerializeToString()

    hero = player.hero_component.get_hero(hero_no)
    for runt_set_info in runt_set_infos:
        runt_po = runt_set_info.runt_po
        runt_no = runt_set_info.runt_no

        if runt_po > game_configs.base_config.get('totemSpaceNum'+str(runt_type)):
            response.res.result = False
            response.res.result_no = 827
            return response.SerializeToString()

        if hero.runt.get(runt_type):
            if hero.runt.get(runt_type).get(runt_po):
                response.res.result = False
                response.res.result_no = 821
                return response.SerializeToString()
        else:
            hero.runt[runt_type] = {}

        runt_info = player.runt.m_runt.get(runt_no)
        if not runt_info:
            response.res.result = False
            response.res.result_no = 825
            return response.SerializeToString()

    now = int(time.time())
    for runt_set_info in runt_set_infos:
        runt_po = runt_set_info.runt_po
        runt_no = runt_set_info.runt_no
        runt_info = player.runt.m_runt.get(runt_no)
        hero.runt.get(runt_type)[runt_po] = [runt_no] + runt_info
        player.runt.reduce_runt(runt_no)
        tlog_action.log('HeroRuntSet', player, hero_no, now,
                        runt_no, runt_po, runt_info[0])

    target_update(player, [55])
    hero.save_data()
    player.runt.save()

    response.res.result = True
    return response.SerializeToString()
예제 #9
0
파일: mine.py 프로젝트: Cuick/traversing
def reset_1242(data, player):
    """
    重置地图,ok
    """
    request = mine_pb2.resetMap()
    request.ParseFromString(data)
    response = mine_pb2.resetResponse()
    response.free = request.free
    # print '1242-request', request
    reset_pos = []
    if request.free == 1:
        if player.mine.can_reset_free():
            reset_pos = player.mine.reset_map()
            mine_status(player, response.mine)
            response.res.result = True
        else:
            response.res.result = False
            response.res.result_no = 12420
            response.res.message = u"免费次数已用完"
    else:
        if not player.mine.can_reset():
            response.res.result = False
            response.res.result_no = 12421
            response.res.message = u"重置次数已用完"
        else:
            reset_price = player.mine.reset_price()
            price = CommonGroupItem(0, reset_price, reset_price, const.GOLD)
            result = item_group_helper.is_afford(player, [price])  # 校验
            if not result.get('result'):
                response.res.result = False
                response.res.result_no = result.get('result_no')
                response.res.message = u'消费不足!'
            else:
                need_gold = item_group_helper.get_consume_gold_num([price])

                def func():
                    consume_data = item_group_helper.consume(player,
                                                             [price],
                                                             const.MINE_RESET)
                    item_group_helper.get_return(player,
                                                 consume_data,
                                                 response.consume)
                    reset_pos = player.mine.reset_map()
                    mine_status(player, response.mine)
                    response.res.result = True
                player.pay.pay(need_gold, const.MINE_RESET, func)
    player.mine.save_data()
    player.act.mine_refresh()
    target_update(player, [56])

    reset_times, _, _ = player.mine.reset_times
    tlog_action.log('MineReset', player, reset_times,
                    str(reset_pos))
    return response.SerializePartialToString()
예제 #10
0
    def level(self, value):
        if self._level != value:
            logger.info('player id:%s level up ++ %s>>%s', self.id,
                        self._level, value)
            # hook task
            hook_task(self.owner, CONDITIONId.LEVEL, self._level)
            target_update(self.owner, [43])
            self._level = value
            tb_character_level.zadd(self._level, self.id)

            # feature open
            if feature_open.is_not_open(self.owner, feature_open.FO_MINE):
                self.owner.mine.reset_data()
예제 #11
0
파일: mine.py 프로젝트: Cuick/traversing
def harvest_1245(data, player):
    """
    收获符文石,待测试
    """
    request = mine_pb2.positionRequest()
    request.ParseFromString(data)
    response = mine_pb2.drawStones()
    response.position = request.position
    detail_info = player.mine.detail_info(request.position)
    normal = detail_info['normal']
    lucky = detail_info['lucky']

    num = sum(normal.values()) + sum(lucky.values())
    if player.runt.bag_is_full(num):
        response.res.result = False
        response.res.result_no = 124501
        logger.error('mine harvest bag is full!')
        return response.SerializePartialToString()

    normal, lucky = player.mine.harvest(request.position)
    if normal:
        if not add_stones(player, normal, response.normal):
            response.res.result = False
            response.res.result_no = 124502
            logger.error('mine harvest add stones fail!')
            return response.SerializePartialToString()
        if not add_stones(player, lucky, response.lucky):
            response.res.result = False
            response.res.result_no = 124503
            logger.error('mine harvest add stones fail!')
            return response.SerializePartialToString()
    else:
        response.res.result = False
        response.res.result_no = 124504
        response.res.message = u"没有可以领取的符文石"
        logger.error('mine harvest no stones to harvest!')
        return response.SerializePartialToString()

    player.mine.save_data()
    player.runt.save()
    player.act.mine_get_runt()
    target_update(player, [58])
    hook_task(player, CONDITIONId.GAIN_RUNT, 1)
    tlog_action.log('MineHarvest',
                    player,
                    request.position,
                    str(normal),
                    str(lucky))
    response.res.result = True
    logger.debug('mine harvest:%s', response)
    return response.SerializePartialToString()
예제 #12
0
def enhance_equipment_402(pro_data, player):
    """强化装备
    @param dynamic_id:
    @param pro_data:
    @return:
    """
    request = equipment_request_pb2.EnhanceEquipmentRequest()
    request.ParseFromString(pro_data)
    equipment_id = request.id
    enhance_type = request.type

    response = equipment_response_pb2.EnhanceEquipmentResponse()

    enhance_info = enhance_equipment(equipment_id,
                                     enhance_type,
                                     player)

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

    enhance_record = enhance_info.get('enhance_record')

    # flag = 1
    # data_format.cost_coin = 0
    for before_lv, after_lv, enhance_cost in enhance_record:
        data_format = response.data.add()
        # if flag == 1:
        #     data_format.before_lv = before_lv
        #     flag = 2
        data_format.before_lv = before_lv
        data_format.after_lv = after_lv
        data_format.cost_coin = enhance_cost
        logger.debug("before_lv %s after_lv %s " % (before_lv, after_lv))
        tlog_action.log('EquipmentEnhance', player,
                        enhance_info.get('equipment_no'),
                        equipment_id, before_lv, after_lv)

    # logger.debug(response.data)
    # logger.debug("response.data===================")
    response.num = enhance_info.get("num")

    # 更新 七日奖励
    target_update(player, [36])
    return response.SerializePartialToString()
예제 #13
0
def enhance_equipment_402(pro_data, player):
    """强化装备
    @param dynamic_id:
    @param pro_data:
    @return:
    """
    request = equipment_request_pb2.EnhanceEquipmentRequest()
    request.ParseFromString(pro_data)
    equipment_id = request.id
    enhance_type = request.type

    response = equipment_response_pb2.EnhanceEquipmentResponse()

    enhance_info = enhance_equipment(equipment_id, enhance_type, player)

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

    enhance_record = enhance_info.get('enhance_record')

    # flag = 1
    # data_format.cost_coin = 0
    for before_lv, after_lv, enhance_cost in enhance_record:
        data_format = response.data.add()
        # if flag == 1:
        #     data_format.before_lv = before_lv
        #     flag = 2
        data_format.before_lv = before_lv
        data_format.after_lv = after_lv
        data_format.cost_coin = enhance_cost
        logger.debug("before_lv %s after_lv %s " % (before_lv, after_lv))
        tlog_action.log('EquipmentEnhance', player,
                        enhance_info.get('equipment_no'), equipment_id,
                        before_lv, after_lv)

    # logger.debug(response.data)
    # logger.debug("response.data===================")
    response.num = enhance_info.get("num")

    # 更新 七日奖励
    target_update(player, [36])
    return response.SerializePartialToString()
예제 #14
0
    def recharge_gain(self,
                      recharge_item,
                      response,
                      channel,
                      is_tencent=False):
        """
        充值掉落
        """
        logger.debug("recharge_gain========1")
        isfirst = 0
        if not is_tencent:
            return_data = gain(self._owner, recharge_item.get('setting'),
                               const.RECHARGE)  # 获取
            get_return(self._owner, return_data, response.gain)
        if recharge_item.get('type') == 2:
            logger.debug("recharge_gain========")
            rebate_call(self._owner, recharge_item)
            self._owner.recharge.send_mail(recharge_item)  # 发送奖励邮件
        else:
            rres = self._owner.base_info.first_recharge(recharge_item,
                                                        response)
            if rres:
                # 首次充值
                isfirst = 1
                self._owner.recharge.send_mail(recharge_item)  # 发送奖励邮件

        tlog_action.log('Recharge', self._owner, isfirst,
                        recharge_item.get('id'), channel)

        charge_num = recharge_item.get('activity')  # 充值元宝数量
        # vip
        self._owner.base_info.recharge += charge_num
        self._owner.base_info.max_single_recharge = max(
            charge_num, self._owner.base_info.max_single_recharge)
        self._owner.base_info.set_vip_level(self._owner.base_info.recharge)

        self._owner.act.condition_add(44, charge_num)
        # 更新 七日奖励
        target_update(self.owner, [44])

        # 活动
        self._owner.recharge.charge(charge_num)
        if not is_tencent:
            self._owner.recharge.get_recharge_response(
                response.info)  # recharge
예제 #15
0
def hero_break_104(data, player):
    """武将突破"""
    args = hero_request_pb2.HeroBreakRequest()
    args.ParseFromString(data)
    hero_no = args.hero_no
    response = hero_response_pb2.HeroBreakResponse()

    res = hero_break_logic(hero_no, player, response)
    if not res.get('result'):
        response.res.result = False
        response.res.result_no = res.get('result_no')
        return response.SerializeToString()
    # 更新 七日奖励
    target_update(player, [55])
    response.res.result = True
    response.break_level = res.get("break_level")
    response.break_item_num = res.get("break_item_num")
    return response.SerializeToString()
예제 #16
0
def compose_rob_treasure_860(data, player):
    """夺宝合成"""
    args = rob_treasure_pb2.ComposeTreasureRequest()
    args.ParseFromString(data)
    treasure_id = args.treasure_id

    response = rob_treasure_pb2.ComposeTreasureResponse()

    chips = game_configs.chip_config.get('map').get(treasure_id)

    for chip_no in chips:
        chip = player.equipment_chip_component.get_chip(chip_no)
        # 没有碎片
        if not chip:
            logger.error('rob_treasure_truce_841, use item times not enough')
            response.res.result = False
            response.res.result_no = 8601
            return response.SerializeToString()

        compose_num = chip.compose_num
        chip_num = chip.chip_num
        # 碎片不足
        if chip_num < compose_num:
            logger.error('rob_treasure_truce_841, use item times not enough')
            response.res.result = False
            response.res.result_no = 8601
            return response.SerializeToString()

    equipment_obj = player.equipment_component.add_equipment(treasure_id)
    for chip_no in chips:
        chip = player.equipment_chip_component.get_chip(chip_no)
        chip.chip_num -= compose_num
    player.equipment_chip_component.save_data()
    player.act.add_treasure(equipment_obj.equipment_config_info.type,
                            equipment_obj.equipment_config_info.quality)
    target_update(player, [60, 61, 62, 63])

    equ = response.equ
    equipment_obj.update_pb(equ)

    tlog_action.log('ComposeTreasure', player, equipment_obj.base_info.id,
                    treasure_id)
    response.res.result = True
    return response.SerializeToString()
예제 #17
0
def compose_rob_treasure_860(data, player):
    """夺宝合成"""
    args = rob_treasure_pb2.ComposeTreasureRequest()
    args.ParseFromString(data)
    treasure_id = args.treasure_id

    response = rob_treasure_pb2.ComposeTreasureResponse()

    chips = game_configs.chip_config.get('map').get(treasure_id)

    for chip_no in chips:
        chip = player.equipment_chip_component.get_chip(chip_no)
        # 没有碎片
        if not chip:
            logger.error('rob_treasure_truce_841, use item times not enough')
            response.res.result = False
            response.res.result_no = 8601
            return response.SerializeToString()

        compose_num = chip.compose_num
        chip_num = chip.chip_num
        # 碎片不足
        if chip_num < compose_num:
            logger.error('rob_treasure_truce_841, use item times not enough')
            response.res.result = False
            response.res.result_no = 8601
            return response.SerializeToString()

    equipment_obj = player.equipment_component.add_equipment(treasure_id)
    for chip_no in chips:
        chip = player.equipment_chip_component.get_chip(chip_no)
        chip.chip_num -= compose_num
    player.equipment_chip_component.save_data()
    player.act.add_treasure(equipment_obj.equipment_config_info.type, equipment_obj.equipment_config_info.quality)
    target_update(player, [60, 61, 62, 63])

    equ = response.equ
    equipment_obj.update_pb(equ)

    tlog_action.log('ComposeTreasure', player, equipment_obj.base_info.id, treasure_id)
    response.res.result = True
    return response.SerializeToString()
예제 #18
0
def hero_upgrade_with_item_103(data, player):
    """武将升级,使用经验药水"""
    args = hero_request_pb2.HeroUpgradeWithItemRequest()
    args.ParseFromString(data)
    response = hero_response_pb2.HeroUpgradeResponse()
    hero_no = args.hero_no
    exp_item_no = args.exp_item_no
    exp_item_num = args.exp_item_num
    # 服务器验证
    res = hero_upgrade_with_item_logic(hero_no, exp_item_no, exp_item_num, player)
    if not res.get("result"):
        response.res.result = res.get("result")
        response.res.result_no = res.get("result_no")
        return response.SerializeToString()
    # 返回
    hero = res.get("hero")
    response.res.result = True
    response.level = hero.level
    response.exp = hero.exp
    # 更新 七日奖励
    target_update(player, [55])
    return response.SerializeToString()
예제 #19
0
 def pvp_overcome_current(self, value):
     self._pvp_overcome_current = value
     # 更新 七日奖励
     target_update(self.owner, [35])
예제 #20
0
 def pvp_high_rank(self, value):
     if value < self._pvp_high_rank:
         self._pvp_high_rank = value
         # 更新 七日奖励
         target_update(self.owner, [33])
예제 #21
0
파일: hjqy.py 프로젝트: Cuick/traversing
def battle_2103(pro_data, player):
    """
    开始战斗
    request:HjqyBattleRequest
    response:HjqyBattleResponse
    """
    request = hjqy_pb2.HjqyBattleRequest()
    request.ParseFromString(pro_data)
    response = hjqy_pb2.HjqyBattleResponse()

    if player.base_info.is_firstday_from_register(const.OPEN_FEATURE_HJQY):
        response.res.result = False
        response.res.result_no = 150901
        return response.SerializeToString()
    boss_id = request.owner_id
    attack_type = request.attack_type  # 全力一击,普通攻击
    logger.debug("request %s" % request)

    hjqyExchangeBUFFTime = game_configs.base_config.get("hjqyExchangeBUFFTime")
    hjqyItemRate = game_configs.base_config.get("hjqyItemRate")

    hjqyExchangeBUFFNumber = game_configs.base_config.get(
        "hjqyExchangeBUFFNumber")
    hjqyExchangeNumber = game_configs.base_config.get("hjqyExchangeNumber")
    need_hjqy_fight_token = hjqyExchangeNumber
    if attack_type == 2:
        need_hjqy_fight_token = hjqyExchangeBUFFNumber
    if is_in_period(hjqyExchangeBUFFTime) and attack_type == 2:
        need_hjqy_fight_token = need_hjqy_fight_token * hjqyItemRate

    if need_hjqy_fight_token > player.finance[const.HJQYFIGHTTOKEN]:
        logger.error("hjqy coin not enough!")
        response.res.result = False
        response.res.result_no = 210301
        return response.SerializePartialToString()

    data = remote_gate['world'].get_boss_info_remote(boss_id)

    if not data or data.get('state') == const.BOSS_DEAD:
        logger.error("hjqy boss dead!")
        response.res.result = False
        response.res.result_no = 210302
        return response.SerializePartialToString()
    if data.get('state') == const.BOSS_RUN_AWAY:
        logger.error("hjqy boss run away!")
        response.res.result = False
        response.res.result_no = 210303
        return response.SerializePartialToString()

    stage_id = data.get("stage_id")
    player.fight_cache_component.stage_id = stage_id
    red_units = player.fight_cache_component.get_red_units()

    blue_units = cPickle.loads(remote_gate['world'].blue_units_remote(boss_id))

    seed1, seed2 = get_seeds()
    player_info = dict(player_id=player.base_info.id,
                       nickname=player.base_info.base_name,
                       user_icon=player.base_info.heads.now_head,
                       level=player.base_info.level)

    str_red_units = cPickle.dumps(red_units)
    red_unpar_data = player.line_up_component.get_red_unpar_data()
    fight_result, boss_state, current_damage_hp, is_kill = remote_gate[
        'world'].hjqy_battle_remote(player_info, boss_id, str_red_units,
                                    red_unpar_data, attack_type, seed1, seed2)

    logger.debug("============battle over")

    # 消耗讨伐令
    player.finance.consume(const.HJQYFIGHTTOKEN, need_hjqy_fight_token,
                           const.HJQY_BATTLE)

    # 功勋奖励
    hjqyMeritoriousServiceOpenTime = game_configs.base_config.get(
        "hjqyMeritoriousServiceOpenTime")
    hjqyMeritoriousServiceRate = game_configs.base_config.get(
        "hjqyMeritoriousServiceRate")
    meritorious_service = player.fight_cache_component._get_stage_config(
    ).meritorious_service
    logger.debug("========= %s %s ========" %
                 (is_in_period(hjqyMeritoriousServiceOpenTime),
                  hjqyMeritoriousServiceOpenTime))
    if is_in_period(hjqyMeritoriousServiceOpenTime):  # 增加功勋的活动
        meritorious_service = meritorious_service * hjqyMeritoriousServiceRate
    player.finance.add(const.HJQYCOIN,
                       meritorious_service,
                       reason=const.HJQY_BATTLE)
    player.finance.save_data()

    response.fight_result = fight_result
    pvp_assemble_units(red_units, blue_units, response)
    response.seed1 = seed1
    response.seed2 = seed2
    response.attack_type = attack_type
    response.hjqy_coin = meritorious_service
    response.stage_id = stage_id
    response.res.result = True

    hook_task(player, CONDITIONId.HJQY, 1)

    tlog_action.log('BattleHJQY', player, boss_id, is_kill)

    # start target
    all_current_damage_hp = remote_gate['world'].\
        hjqy_damage_hp_remote(player.base_info.id)
    player.act.condition_update(38, current_damage_hp)
    player.act.condition_update(39, all_current_damage_hp)
    # 更新 七日奖励
    target_update(player, [38, 39])

    return response.SerializePartialToString()
예제 #22
0
파일: hjqy.py 프로젝트: wyjstar/traversing
def battle_2103(pro_data, player):
    """
    开始战斗
    request:HjqyBattleRequest
    response:HjqyBattleResponse
    """
    request = hjqy_pb2.HjqyBattleRequest()
    request.ParseFromString(pro_data)
    response = hjqy_pb2.HjqyBattleResponse()

    if player.base_info.is_firstday_from_register(const.OPEN_FEATURE_HJQY):
        response.res.result = False
        response.res.result_no = 150901
        return response.SerializeToString()
    boss_id = request.owner_id
    attack_type = request.attack_type # 全力一击,普通攻击
    logger.debug("request %s" % request)

    hjqyExchangeBUFFTime = game_configs.base_config.get("hjqyExchangeBUFFTime")
    hjqyItemRate = game_configs.base_config.get("hjqyItemRate")

    hjqyExchangeBUFFNumber = game_configs.base_config.get("hjqyExchangeBUFFNumber")
    hjqyExchangeNumber = game_configs.base_config.get("hjqyExchangeNumber")
    need_hjqy_fight_token = hjqyExchangeNumber
    if attack_type == 2:
        need_hjqy_fight_token = hjqyExchangeBUFFNumber
    if is_in_period(hjqyExchangeBUFFTime) and attack_type == 2:
        need_hjqy_fight_token = need_hjqy_fight_token * hjqyItemRate

    if need_hjqy_fight_token > player.finance[const.HJQYFIGHTTOKEN]:
        logger.error("hjqy coin not enough!")
        response.res.result = False
        response.res.result_no = 210301
        return response.SerializePartialToString()

    data = remote_gate['world'].get_boss_info_remote(boss_id)

    if not data or data.get('state') == const.BOSS_DEAD:
        logger.error("hjqy boss dead!")
        response.res.result = False
        response.res.result_no = 210302
        return response.SerializePartialToString()
    if data.get('state') == const.BOSS_RUN_AWAY:
        logger.error("hjqy boss run away!")
        response.res.result = False
        response.res.result_no = 210303
        return response.SerializePartialToString()


    stage_id = data.get("stage_id")
    player.fight_cache_component.stage_id = stage_id
    red_units = player.fight_cache_component.get_red_units()

    blue_units = cPickle.loads(remote_gate['world'].blue_units_remote(boss_id))

    seed1, seed2 = get_seeds()
    player_info = dict(player_id=player.base_info.id,
            nickname=player.base_info.base_name,
            user_icon=player.base_info.heads.now_head,
            level=player.base_info.level)

    str_red_units = cPickle.dumps(red_units)
    red_unpar_data = player.line_up_component.get_red_unpar_data()
    fight_result, boss_state, current_damage_hp, is_kill = remote_gate['world'].hjqy_battle_remote(player_info, boss_id, str_red_units, red_unpar_data, attack_type, seed1, seed2)

    logger.debug("============battle over")

    # 消耗讨伐令
    player.finance.consume(const.HJQYFIGHTTOKEN, need_hjqy_fight_token, const.HJQY_BATTLE)

    # 功勋奖励
    hjqyMeritoriousServiceOpenTime = game_configs.base_config.get("hjqyMeritoriousServiceOpenTime")
    hjqyMeritoriousServiceRate = game_configs.base_config.get("hjqyMeritoriousServiceRate")
    meritorious_service = player.fight_cache_component._get_stage_config().meritorious_service
    logger.debug("========= %s %s ========"%(is_in_period(hjqyMeritoriousServiceOpenTime), hjqyMeritoriousServiceOpenTime ))
    if is_in_period(hjqyMeritoriousServiceOpenTime):  # 增加功勋的活动
        meritorious_service = meritorious_service * hjqyMeritoriousServiceRate
    player.finance.add(const.HJQYCOIN, meritorious_service, reason=const.HJQY_BATTLE)
    player.finance.save_data()

    response.fight_result = fight_result
    pvp_assemble_units(red_units, blue_units, response)
    response.seed1 = seed1
    response.seed2 = seed2
    response.attack_type = attack_type
    response.hjqy_coin = meritorious_service
    response.stage_id = stage_id
    response.res.result = True

    hook_task(player, CONDITIONId.HJQY, 1)

    tlog_action.log('BattleHJQY', player, boss_id, is_kill)

    # start target
    all_current_damage_hp = remote_gate['world'].\
        hjqy_damage_hp_remote(player.base_info.id)
    player.act.condition_update(38, current_damage_hp)
    player.act.condition_update(39, all_current_damage_hp)
    # 更新 七日奖励
    target_update(player, [38, 39])

    return response.SerializePartialToString()