Exemplo n.º 1
0
def buy_truce_item_861(data, player):
    """买休战符"""
    args = rob_treasure_pb2.BuyTruceItemRequest()
    args.ParseFromString(data)
    num = args.num

    response = rob_treasure_pb2.BuyTruceItemResponse()

    price = game_configs.base_config.get('indianaTrucePrice')
    is_afford_res = is_afford(player, price, multiple=num)  # 校验

    """
    if not is_afford_res.get('result'):
        logger.error('rob_treasure_truce_841, item not enough')
        response.res.result = False
        response.res.result_no = is_afford_res.get('result_no')
        return response.SerializeToString()

    return_data = consume(player, price, const.BUY_TRUCE_ITEM, multiple=num)  # 消耗
    get_return(player, return_data, response.consume)

    """
    gain_items = game_configs.base_config.get('indianaIteam')
    return_data = gain(player, gain_items, const.BUY_TRUCE_ITEM, multiple=num)
    get_return(player, return_data, response.gain)

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 2
0
def open_chest_836(data, player):

    response = OpenChestResponse()

    chest_time = player.travel_component.chest_time

    if time.localtime(chest_time).tm_year == time.localtime().tm_year \
            and time.localtime(chest_time).tm_yday == time.localtime().tm_yday:
        response.res.result = False
        response.res.result_no = 816
        return response.SerializeToString()

    res_drops = response.drops
    drops = []
    common_bag = BigBag(game_configs.base_config.get('travelChest'))
    common_drop = common_bag.get_drop_items()
    drops.extend(common_drop)
    drop_data = gain(player, drops, const.TRAVEL_OPEN_CHEST)
    get_return(player, drop_data, res_drops)

    player.travel_component.chest_time = int(time.time())

    player.travel_component.save()

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 3
0
def travel_init_830(data, player):
    """init travel"""
    response = TravelInitResponse()

    for (stage_id, item) in player.travel_component.travel.items():
        chapter = response.chapter.add()
        chapter.stage_id = stage_id
        for tra in item:
            res_travel = chapter.travel.add()
            res_travel.event_id = tra[0]
            res_drops = res_travel.drops
            drop_data = get_drop_data(tra[1])
            get_return(player, drop_data, res_drops)
            if game_configs.travel_event_config.get('events').get(tra[0]%xs).type == 1:
                if len(tra) == 3:
                    res_travel.time = tra[2]

    response.chest_time = player.travel_component.chest_time

    player.travel_component.update_travel_item(response)

    update_auto(player, 1)
    deal_auto_response(response, player)

    player.travel_component.save()

    response.res.result = True
    # logger.debug(response)
    return response.SerializeToString()
Exemplo n.º 4
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.º 5
0
def get_fund_activity_1850(data, player):
    # 成长基金活动
    request = activity_pb2.GetActGiftRequest()
    request.ParseFromString(data)
    activity_id = request.act_id
    response = activity_pb2.GetActGiftResponse()
    response.res.result = False

    if not player.act.is_activiy_open(activity_id):
        response.res.result = False
        response.res.result_no = 800
        return response.SerializeToString()

    act_item = game_configs.activity_config.get(activity_id)
    if act_item is None:
        response.res.result_no = 185000
        return response.SerializeToString()

    info = get_act_info(player, activity_id)

    if info.get('state') != 2:
        response.res.result = False
        logger.error("条件不满足")
        response.res.result_no = 800
        return response.SerializeToString()

    return_data = gain(player,
                       act_item.reward,
                       const.FUND)
    get_return(player, return_data, response.gain)
    player.act.act_infos[activity_id][0] = 3
    player.act.save_data()

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 6
0
def sign_in_box_1404(pro_data, player):
    """签到宝箱领奖"""
    request = SignInBoxRequest()
    request.ParseFromString(pro_data)
    _id = request.id
    response = SignInResponse()

    activity_info = game_configs.activity_config.get(_id)

    # 验证宝箱签到, 是否领取
    if _id in player.sign_in_component.box_sign_in_prize:
        response.res.result = False
        response.res.result_no = 1404
        logger.debug(response)
        return response.SerializePartialToString()
    # 验证宝箱签到条件
    for day in activity_info.parameterC:
        if day not in player.sign_in_component.sign_in_days:
            response.res.result = False
            response.res.result_no = 1405
            logger.debug(response)
            return response.SerializePartialToString()

    return_data = gain(player, activity_info.reward, const.BOX_SIGN)
    get_return(player, return_data, response.gain)

    player.sign_in_component.box_sign_in_prize.append(_id)
    player.sign_in_component.save_data()

    response.res.result = True
    logger.debug(response)
    return response.SerializePartialToString()
Exemplo n.º 7
0
def load_to_game_response(rewards, response):
    return_data = []
    for data in rewards:
        for k, v in data.items():
            return_data.append([k, v[0], v[2]])

    get_return(None, return_data, response)
Exemplo n.º 8
0
def melting_equipment(equipment_id, response, player):
    """熔炼
    @param dynamic_id:
    @param equipment_ids:
    @param kwargs:
    @return:
    """
    if is_not_open(player, FO_EQUIP_SACRIFICE):
        return {"result": False, "result_no": 837}
    equipment_obj = player.equipment_component.get_equipment(equipment_id)
    if not equipment_obj:
        return {'result': False, 'result_no': 401, 'message': u''}
    melting_items = equipment_obj.melting_item
    gain = item_group_helper.gain(player, melting_items, const.MELTING_EQUIPMENT)

    item_group_helper.get_return(player, gain, response.cgr)

    tlog_action.log('EquipmentMelting', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    # 删除装备
    player.equipment_component.delete_equipment(equipment_id)

    # 添加强化金币
    strength_coin = 0
    for record in equipment_obj.enhance_record.enhance_record:
        strength_coin += record[2]

    strength_coin = int(strength_coin*game_configs.base_config.get("equRefundRatio"))
    return strength_coin
Exemplo n.º 9
0
def get_tomorrow_gift_1122(data, player):
    response = online_gift_pb2.GetActivityResponse()
    response.result = False

    tomorrow_gift = game_configs.activity_config.get(15)[0]
    if not tomorrow_gift:
        logger.error('tomorrow gift is not exist')
        return response.SerializeToString()
    if not tomorrow_gift.get('is_open'):
        logger.error('tomorrow gift is not open')
        return response.SerializeToString()
    if player.base_info.tomorrow_gift != 0:
        logger.error('tomorrow gift is taken!')
        return response.SerializeToString()
    register_time = time.localtime(player.base_info.register_time)
    now_time = time.localtime()
    if now_time.tm_yday <= register_time.tm_yday and now_time.tm_year <= register_time.tm_year:
        logger.error('tomorrow gift is miss!')
        return response.SerializeToString()

    player.base_info.tomorrow_gift = tomorrow_gift.id
    player.base_info.save_data()

    gain_data = tomorrow_gift['reward']
    return_data = gain(player, gain_data, const.TOMORROW_GIFT)
    get_return(player, return_data, response.gain)
    response.result = True
    return response.SerializeToString()
Exemplo n.º 10
0
def awakening_equipment_406(pro_data, player):
    """熔炼装备
    @param dynamic_id:
    @param pro_data:
    @return:
    """
    request = equipment_request_pb2.AwakeningEquipmentRequest
    request.ParseFromString()

    equipment_id = request.id
    data = awakening_equipment(equipment_id, player)

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

    player = data.get('player')
    gain = data.get('gain', [])
    item_group_helper.get_return(player, gain, response.cgr)

    logger.debug(response)
    return response.SerializePartialToString()
Exemplo n.º 11
0
def melting_equipment(equipment_id, response, player):
    """熔炼
    @param dynamic_id:
    @param equipment_ids:
    @param kwargs:
    @return:
    """
    equipment_obj = player.equipment_component.get_equipment(equipment_id)
    if not equipment_obj:
        return {'result': False, 'result_no': 401, 'message': u''}
    melting_items = equipment_obj.melting_item
    gain = item_group_helper.gain(player, melting_items, const.MELTING_EQUIPMENT)

    item_group_helper.get_return(player, gain, response.cgr)

    tlog_action.log('EquipmentMelting', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    # 删除装备
    player.equipment_component.delete_equipment(equipment_id)

    # 添加强化金币
    strength_coin = 0
    for record in equipment_obj.enhance_record.enhance_record:
        strength_coin += record[2]

    strength_coin = int(strength_coin*game_configs.base_config.get("equRefundRatio"))
    player.finance.coin += strength_coin
    player.finance.save_data()
    response.cgr.finance.coin += strength_coin
    change = response.cgr.finance.finance_changes.add()
    change.item_type = 107
    change.item_num = strength_coin
    change.item_no = 1
Exemplo n.º 12
0
 def func():
     consume_return_data = item_group_helper.consume(player,
                                                     [price],
                                                     const.MINE_ACC)
     item_group_helper.get_return(player,
                                  consume_return_data,
                                  response.consume)
Exemplo n.º 13
0
    def func():
        player.sign_in_component.sign_in(day)
        player.sign_in_component.save_data()
        sign_round = player.sign_in_component.sign_round
        print game_configs.sign_in_config.get(sign_round), "---------"
        print game_configs.sign_in_config.get(sign_round).get(day), "-------"
        if not game_configs.sign_in_config.get(sign_round) or not game_configs.sign_in_config.get(sign_round).get(day):
            return
        sign_in_info = game_configs.sign_in_config.get(sign_round).get(day)

        #vip双倍
        if player.base_info.vip_level > 0 and \
                sign_in_info.get("vipDouble") and \
                player.base_info.vip_level >= sign_in_info.get("vipDouble"):
            is_double = 1
        else:
            is_double = 0

        if is_double:
            return_data = gain(player, sign_in_info.get("reward"), const.REPAIR_SIGN, multiple=2)
            get_return(player, return_data, response.gain)
        else:
            return_data = gain(player, sign_in_info.get("reward"), const.REPAIR_SIGN)
            get_return(player, return_data, response.gain)

        player.sign_in_component.repair_sign_in_times += 1
        player.sign_in_component.save_data()
        tlog_action.log('RepairSignIn', player, day, len(player.sign_in_component.sign_in_days), sign_in_info.get("id"))
Exemplo n.º 14
0
 def func():
     return_data = consume(player, _consume, const.RESET_PVP_TIME, multiple=request.times)  # 消耗
     get_return(player, return_data, response.consume)
     player.pvp.pvp_times += request.times
     player.pvp.pvp_refresh_time = time.time()
     player.pvp.pvp_refresh_count += request.times
     player.pvp.save_data()
Exemplo n.º 15
0
def hero_break_logic(hero_no, player, response):
    hero = player.hero_component.get_hero(hero_no)
    hero_info = game_configs.hero_config.get(hero_no)

    # 验证武将是否突破到上限
    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)

    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}
Exemplo n.º 16
0
def do_hero_refine(player, hero_no, refine, response):
    hero = player.hero_component.get_hero(hero_no)
    _refine_item = game_configs.seal_config.get(refine)
    if not hero:
        logger.error('cant find hero:%s', hero_no)
        return {'result': False, 'result_no': 11801}
    if not _refine_item:
        logger.error('cant find refine item:%s', refine)
        return {'result': False, 'result_no': 11802}

    current_refine_item = game_configs.seal_config.get(hero.refine)
    if current_refine_item and _refine_item.id != current_refine_item.get('next'):
        logger.error('not next refine item:%s', refine)
        return {'result': False, 'result_no': 11803}

    result = is_afford(player, _refine_item.expend)  # 校验
    if not result.get('result'):
        logger.error('cant afford refine:%s:cur%s',
                     _refine_item.expend,
                     player.brew.nectar)
        return {'result': False, 'result_no': 11804}

    tlog_action.log('HeroRefine', player, hero_no, refine)

    return_data = consume(player, _refine_item.expend, const.HERO_REFINE)
    get_return(player, return_data, response.consume)

    hero.refine = refine
    player.brew.save_data()
    hero.save_data()

    return {'result': True}
Exemplo n.º 17
0
    def func():
        not_luck_times = (player.limit_hero.draw_times+1) % \
            game_configs.base_config.get('CardTimeCumulateTimes')
        if not_luck_times:
            pseudo_bag_id = act_conf.reward[0].item_no
            drop = do_get_draw_drop_bag(pseudo_bag_id,
                                        player.limit_hero.draw_times+1)
        else:
            drop = game_configs.base_config.get('CardTimeCumulate')

        return_data = gain(player, drop, const.LIMIT_HERO)
        get_return(player, return_data, response.gain)

        player.limit_hero.draw_times += 1
        if draw_flag == 1:
            free_time = int(time.time())
            player.limit_hero.free_time = free_time
            response.free_time = free_time
        elif draw_flag == 2:
            player.limit_hero.integral_draw_times += 1
        # else:
        add_integral = shop_conf.Integral[0].num
        rank_integral = integral + add_integral + 1 - time.time()/10000000000
        rank_helper.add_rank_info('LimitHeroRank',
                                  player.base_info.id, rank_integral)
        player.limit_hero.save_data()
        deal_response(player, response)
Exemplo n.º 18
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.º 19
0
def get_level_gift_1131(data, player):
    """get online gift"""
    request = level_gift_pb2.GetLevelGift()
    request.ParseFromString(data)
    response = level_gift_pb2.GetLevelGiftResponse()

    activity_level_gift = game_configs.activity_config.get(3)

    if request.gift_id in player.level_gift.received_gift_ids:
        response.result = False
        return response.SerializeToString()

    for a in activity_level_gift:
        if request.gift_id == a['id']:
            gain_data = a['reward']
            return_data = gain(player, gain_data, const.LEVEL_GIFT)
            get_return(player, return_data, response.gain)

            player.level_gift.received_gift_ids.append(request.gift_id)
            player.level_gift.save_data()
            tlog_action.log('LevelGift', player, request.gift_id)

            response.result = True
            return response.SerializeToString()

    response.result = False
    return response.SerializeToString()
Exemplo n.º 20
0
    def recharge_gain(self, recharge_item, response, 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'))

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

        # 活动
        self._owner.recharge.charge(charge_num)
        if not is_tencent:
            self._owner.recharge.get_recharge_response(response.info) # recharge
Exemplo n.º 21
0
    def refresh_price(self, shop_type, response):
        shop_item = game_configs.shop_type_config.get(shop_type)
        if not shop_item:
            raise Exception('error shop type:%s' % shop_type)
        price = 0
        free_times = shop_item.get('freeRefreshTimes')

        __shop_data = self._shop_data[shop_type]
        if __shop_data['refresh_times'] >= free_times:
            refreshprice = shop_item.get('refreshPrice')
            if not refreshprice:
                logger.debug('no refresh price:shop type:%s', shop_type)

            # 道具
            refresh_items = shop_item.get('refreshItem')
            has_refresh_item = is_afford(self._owner,
                                         refresh_items).get('result')
            if refresh_items and has_refresh_item:
                price = 0
                # 如果有刷新令,则消耗刷新令
                return_data = consume(self._owner,
                                      refresh_items,
                                      const.SHOP_REFRESH,
                                      shop=None,
                                      luck_config=None,
                                      multiple=1)
                get_return(self._owner, return_data, response.consume)
            elif not has_refresh_item or not refresh_items:
                price = get_consume_gold_num(refreshprice)

                xs = 1
                if (not has_refresh_item or
                        not refresh_items) and shop_type == 12:
                    # 9活动
                    act_confs = game_configs.activity_config.get(22, [])
                    for act_conf in act_confs:
                        if self.owner.act.is_activiy_open(act_conf.id):
                            xs = act_conf.parameterC[0]
                            price = int(price * xs)
                            break
                return_data = consume(self._owner,
                                      refreshprice,
                                      const.SHOP_REFRESH,
                                      shop=None,
                                      luck_config=None,
                                      multiple=xs)
                get_return(self._owner, return_data, response.consume)

        def func():
            __shop_data['refresh_times'] += 1
            __shop_data['last_refresh_time'] = time.time()
            __shop_data['items'] = {}
            if shop_item.itemNum > 0:
                __shop_data['item_ids'] = get_shop_item_ids(
                    shop_type, self._shop_data[shop_type]['luck_num'])
            self.save_data()

        result = self._owner.pay.pay(price, const.SHOP_REFRESH, func)
        return result
Exemplo n.º 22
0
def use_item_302(pro_data, player):
    """使用道具"""
    item_pb = item_pb2.ItemPB()
    item_pb.ParseFromString(pro_data)
    item_no = item_pb.item_no
    item_num = item_pb.item_num
    print("request:", item_pb)
    item_config_item = game_configs.item_config.get(item_no)
    if not item_config_item:
        return
    item_func = item_config_item.func
    drop_id = item_config_item.dropId
    func_args1 = item_config_item.funcArg1
    func_args2 = item_config_item.funcArg2

    response = ItemUseResponse()
    common_response = response.res  # = common_response
    common_response.result = True

    # 校验道具数量
    item = player.item_package.get_item(item_no)
    if not item or item.num < item_num:
        common_response.result = False
        common_response.result_no = 106
        print("error:", 106)
        # common_response.message = u"道具不足!"
        return response.SerializeToString()

    if item_func == 2:
        # 宝箱
        box_key_no = func_args1
        box_key = player.item_package.get_item(box_key_no)
        if not box_key or box_key.num < func_args2 * item_num:
            print("error:", 107)
            common_response.result = False
            common_response.result_no = 107
            # common_response.message = u"box key 不足!" + str(func_args2 * item_num) + "_" + str(box_key.num)
            return response.SerializeToString()
        # 消耗key
        #box_key.num -= func_args2 * item_num
        player.item_package.consume_item(box_key_no, item_num)
        player.item_package.save_data()

    big_bag = BigBag(drop_id)
    for i in range(item_num):
        drop_item_group = big_bag.get_drop_items()
        return_data = gain(player, drop_item_group, const.USE_ITEM)
        get_return(player, return_data, response.gain)

    logger.debug("item_no:%s", item_no)
    logger.debug("item_num:%s", item_num)

    # 使用招财符
    if item_config_item.canUse == 11:
        player.buy_coin.extra_can_buy_times += item_num

    player.item_package.consume_item(item_no, item_num)

    return response.SerializeToString()
Exemplo n.º 23
0
def get_21_gift(player, act_conf, response):  # 通关关卡
    if player.stage_component.get_stage(act_conf.parameterA).state != 1:
        response.res.result_no = 800
        return 0
    gain_data = act_conf.reward
    return_data = gain(player, gain_data, const.ACT21)
    get_return(player, return_data, response.gain)
    return 1
Exemplo n.º 24
0
 def func():
     consume_return_data = item_group_helper.consume(player,
                                                     price,
                                                     const.MINE_ACC)
     item_group_helper.get_return(player,
                                  consume_return_data,
                                  response.consume)
     response.res.result = player.mine.acc_mine_time(pos)
Exemplo n.º 25
0
def get_20_gift(player, act_conf, response):  # 战力
    # if act_conf.parameterA > player.line_up_component.combat_power:
    if act_conf.parameterA > player.line_up_component.hight_power:
        response.res.result_no = 802
        return 0
    gain_data = act_conf.reward
    return_data = gain(player, gain_data, const.ACT20)
    get_return(player, return_data, response.gain)
    return 1
Exemplo n.º 26
0
 def func():
     consume_return_data = item_group_helper.consume(player, shop_item.discountPrice, const.MINE_EXCHANGE)  # 消耗
     return_data = item_group_helper.gain(player, shop_item.gain, const.MINE_EXCHANGE)  # 获取
     # extra_return_data = gain(player, shop_item.extra_gain)  # 额外获取
     item_group_helper.get_return(player, consume_return_data, response.consume)
     item_group_helper.get_return(player, return_data, response.gain)
     # get_return(player, extra_return_data, response)
     player.mine.buy_shop(request.position, request.shop_id)
     player.mine.save_data()
Exemplo n.º 27
0
 def func():
     return_data = gain(player, act_conf.reward, const.ACTIVITY)  # 获取
     get_return(player, return_data, response.gain)
     if act_conf.type == 30:
         if act_conf.count <= (info.get('jindu') + 1):
             player.act.act_infos[activity_id][0] = 3
         else:
             player.act.act_infos[activity_id] = [1, info.get('jindu') + 1]
     else:
         player.act.act_infos[activity_id][0] = 3
Exemplo n.º 28
0
 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
Exemplo n.º 29
0
def add_items(player, response, drop_ids):
    """ 添加道具给玩家 """
    for drop_id in drop_ids:
        big_bag = BigBag(drop_id)
        drop_item_group = big_bag.get_drop_items()
        return_data = item_group_helper.gain(player,
                                             drop_item_group,
                                             const.MINE_REWARD)
        item_group_helper.get_return(player, return_data, response.gain)
    return response
Exemplo n.º 30
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

    response = hero_response_pb2.HeroSacrificeResponse()
    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)

    # baseconfig {1000000: 'item_id'}
    exp_items = game_configs.base_config.get("sacrificeGainExp")

    keys = []
    try:
        keys = sorted([int(item) for item in list(exp_items)], reverse=True)
    except Exception:
        logger.error("base_config sacrificeGainExp key must be int type:%s.",
                     str(exp_items))
        return

    for exp in keys:
        item_no = exp_items.get(exp)
        config = game_configs.item_config.get(item_no)
        exp = config.get("funcArg1")
        if total_exp/exp > 0:
            exp_item_no = item_no
            exp_item_num = total_exp/exp
            break

    player.item_package.add_item(Item(exp_item_no, exp_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
    response.res.result = True
    # print "*"*80
    # print response
    return response
Exemplo n.º 31
0
def hero_sell_107(data, player):
    """武将出售"""
    args = hero_request_pb2.HeroSellRequest()
    args.ParseFromString(data)
    hero_nos = args.hero_nos

    response = hero_response_pb2.HeroSellResponse()
    for hero_no in hero_nos:
        sell_gain = game_configs.hero_config.get(hero_no).sellGain
        return_data = gain(player, sell_gain)
        get_return(player, return_data, response.gain)

    response.res.result = True
    return response
Exemplo n.º 32
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

    response = hero_response_pb2.HeroSacrificeResponse()
    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)
        get_return(player, return_data, gain_response)
        # 经验
        exp = hero.get_all_exp()
        total_exp += exp

    # baseconfig {1000000: 'item_id'}
    exp_items = game_configs.base_config.get("sacrificeGainExp")

    keys = []
    try:
        keys = sorted([int(item) for item in list(exp_items)], reverse=True)
    except Exception:
        logger.error("base_config sacrificeGainExp key must be int type:%s.",
                     str(exp_items))
        return

    for exp in keys:
        item_no = exp_items.get(exp)
        config = game_configs.item_config.get(item_no)
        exp = config.get("funcArg1")
        if total_exp / exp > 0:
            exp_item_no = item_no
            exp_item_num = total_exp / exp
            break

    player.item_package.add_item(Item(exp_item_no, exp_item_num))
    player.item_package.save_data()
    item_pb = gain_response.items.add()
    item_pb.item_no = exp_item_no
    item_pb.item_num = exp_item_num
    response.res.result = True
    return response
Exemplo n.º 33
0
    def get_reward(self, act_id, response):
        """docstring for get_reward"""

        act_item = game_configs.activity_config.get(act_id)
        act_info = self._act_info[act_id]
        if act_info.get("act_times") < int(act_item.parameterA):
            logger.error("activity times not enough!")
            return dict(result=False, result_no=250101)
        if act_info.get("finished"):
            logger.error("activity has finished!")
            return dict(result=False, result_no=250102)
        act_info["finished"] = True
        data = gain(self._owner, act_item.reward, const.GUILD_ACTIVITY)
        get_return(self._owner, data, response.gain)
        self.save_data()
        return dict(result=True)
Exemplo n.º 34
0
def PvpOvercomAward_1510(data, player):
    request = pvp_rank_pb2.PvpOvercomeAwardRequest()
    request.ParseFromString(data)

    player.pvp.check_time()
    response = pvp_rank_pb2.PvpOvercomeAwardResponse()
    ggzj_item = game_configs.ggzj_config.get(request.index)

    if not ggzj_item:
        logger.error('ggzj config id err:%s', request.index)
        response.res.result = False
        response.res.result_no = 151001
        return response.SerializePartialToString()

    if ggzj_item.get('section') > player.pvp.pvp_overcome_current:
        logger.error('ggzj award id err:%s(%s-%s)', request.index,
                     ggzj_item.get('section'), player.pvp.pvp_overcome_current)
        response.res.result = False
        response.res.result_no = 151002
        return response.SerializePartialToString()

    if request.index in player.pvp.pvp_overcome_awards:
        logger.error('ggzj award id repeat:%s-%s', request.index,
                     player.pvp.pvp_overcome_awards)
        response.res.result = False
        response.res.result_no = 151003
        return response.SerializePartialToString()

    award = ggzj_item.get('database')
    if not award:
        logger.error('ggzj database is null:%s', request.index)
        response.res.result = False
        response.res.result_no = 151004
        return response.SerializePartialToString()

    logger.info('ggzj take award %s %s', request.index,
                ggzj_item.get('database'))

    return_data = gain(player, award, const.PVP_OVERCOME)
    get_return(player, return_data, response.gain)
    player.pvp.pvp_overcome_awards.append(request.index)
    player.pvp.save_data()
    tlog_action.log('OvercomeAward', player, request.index)

    response.res.result = True
    return response.SerializePartialToString()
Exemplo n.º 35
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
Exemplo n.º 36
0
def pvb_get_award_1708(data, player):
    response = PvbAwardResponse()
    boss = player.world_boss.get_boss("world_boss")
    award_type, award, rank_no, is_over = boss.get_award()
    player.world_boss.save_data()
    logger.debug("award_type %s, award %s, is_over %s" %
                 (award_type, award, is_over))
    response.is_over = is_over
    if not award:
        response.SerializePartialToString()
    response.award_type = award_type  # award_type
    if award_type == const.PVB_IN_AWARD:
        total_coin = 0
        total_soul = 0
        for demage_hp in award:
            all_vars = dict(damage=demage_hp)
            coin_world_boss_formula = game_configs.formula_config.get(
                "coinWorldboss").get("formula")
            assert coin_world_boss_formula != None, "isHit formula can not be None!"
            coin = eval(coin_world_boss_formula, all_vars)
            soul_world_boss_formula = game_configs.formula_config.get(
                "soulWorldboss").get("formula")
            assert soul_world_boss_formula != None, "isHit formula can not be None!"
            soul = eval(soul_world_boss_formula, all_vars)
            total_coin += int(coin)
            total_soul += int(soul)
            print("coin and soul", coin, soul)

        change = response.gain.finance.finance_changes.add()
        change.item_type = 107
        change.item_num = int(total_coin)
        change.item_no = const.COIN
        change = response.gain.finance.finance_changes.add()
        change.item_type = 107
        change.item_num = int(total_soul)
        change.item_no = const.HERO_SOUL
    elif award_type != 0:
        bigbag = BigBag(award)
        drop_items = bigbag.get_drop_items()
        return_data = gain(player, drop_items, const.WORLD_BOSS_AWARD)
        get_return(player, return_data, response.gain)
    #response.rank_no = remote_gate['world'].get_rank_no_remote(player.base_info.id, "world_boss")
    response.rank_no = rank_no
    logger.debug("pvb_get_award_1708:%s" % response)
    return response.SerializePartialToString()
Exemplo n.º 37
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.º 38
0
def shop_equipment_oper(pro_data, player):
    """装备抽取"""
    request = shop_pb2.ShopRequest()
    request.ParseFromString(pro_data)
    response = shop_pb2.ShopResponse()

    shop_id = request.ids[0]
    shop_num = request.num
    shop_item = game_configs.shop_config.get(shop_id)

    if shop_num == 1:  # and not is_consume(player, shop_item):
        # 免费抽取
        return_data = gain(player, shop_item.gain,
                           const.SHOP_DRAW_EQUIPMENT)  # 获取
        extra_return_data = gain(player, shop_item.extraGain,
                                 const.SHOP_DRAW_EQUIPMENT)  # 额外获取

        get_return(player, return_data, response.gain)
        get_return(player, extra_return_data, response.gain)
    # 多装备抽取
    elif shop_num >= 1:
        for i in range(shop_num):
            result = is_afford(player, shop_item.consume)  # 校验
            if not result.get('result'):
                response.res.result = False
                response.res.result_no = 101
                return response.SerializePartialToString()

        for i in range(shop_num):
            return_data = consume(player, shop_item.consume,
                                  const.SHOP_DRAW_EQUIPMENT)  # 消耗
            get_return(player, return_data, response.consume)

        for i in range(shop_num):
            return_data = gain(player, shop_item.gain,
                               const.SHOP_DRAW_EQUIPMENT)  # 获取
            extra_return_data = gain(player, shop_item.extraGain,
                                     const.SHOP_DRAW_EQUIPMENT)  # 额外获取

            get_return(player, return_data, response.gain)
            get_return(player, extra_return_data, response.gain)

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 39
0
def get_activity_28_gift_1834(data, player):
    request = activity_pb2.GetActGiftRequest()
    request.ParseFromString(data)
    activity_id = request.act_id
    quantity = request.quantity
    response = activity_pb2.GetActGiftResponse()
    response.res.result = False

    activity_conf = game_configs.activity_config.get(activity_id)
    if not activity_conf:
        logger.error('not found activity id:%s', activity_id)
        response.res.result_no = 183401
        return response.SerializeToString()
    if not player.act.is_activiy_open(activity_id):
        logger.error('activity not open id:%s', activity_id)
        response.res.result_no = 183402
        return response.SerializeToString()

    price = activity_conf.parameterA * activity_conf.parameterC[0]
    activity_consume = parse({107: [price, price, 29]})
    for i in range(30):
        print player.finance[i]
    result = is_afford(player, activity_consume, multiple=quantity)
    if not result.get('result'):
        logger.error('activity not enough res:%s', price)
        response.res.result_no = 183403
        return response.SerializeToString()

    consume_data = consume(player,
                           activity_consume,
                           const.act_28,
                           multiple=quantity)
    get_return(player, consume_data, response.consume)

    return_data = gain(player,
                       activity_conf.reward,
                       const.act_28,
                       multiple=quantity)
    get_return(player, return_data, response.gain)
    tlog_action.log('GodHeroExchange', player, activity_id, quantity)

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 40
0
        def func():
            return_data = consume(self.owner, _consume, const.DREW)
            get_return(self.owner, return_data, response.consume)

            self._brew_step += 1
            rand = random.random() * sum(critical_type.values())
            for critical_num, rand_range in critical_type.items():
                if rand < rand_range:
                    increment = critical_num * game_configs.base_config.get(
                        'cookingWineOutput')
                    self._nectar_cur += int(increment)
                    break
                else:
                    rand -= rand_range
            logger.info(
                'brew type:%s, rand:%s nectar:%s nectar\
    cur:%s time:%s cri:%s', brew_type, rand, self.nectar, self._nectar_cur,
                self.brew_times, critical_num)

            self.save_data()
Exemplo n.º 41
0
def sign_in_box_1404(pro_data, player):
    """签到宝箱领奖"""
    request = SignInBoxRequest()
    request.ParseFromString(pro_data)
    _id = request.id
    response = SignInResponse()

    activity_info = game_configs.activity_config.get(_id)

    # 验证宝箱签到, 是否领取
    if _id in player.sign_in_component.box_sign_in_prize:
        response.res.result = False
        response.res.result_no = 1404
        logger.error("sign in box has got!")
        return response.SerializePartialToString()
    # 验证宝箱签到条件
    for day in activity_info.parameterC:
        if day not in player.sign_in_component.sign_in_days:
            response.res.result = False
            response.res.result_no = 1405
            logger.error("sign in box condition not enough!")
            return response.SerializePartialToString()

    ## 验证宝箱累积抽奖轮数
    #sign_round = player.sign_in_component.sign_round
    #if activity_info.parameterB != sign_round:
    #response.res.result = False
    #response.res.result_no = 1406
    #logger.error("sign in box condition has reached!")
    #return response.SerializePartialToString()

    return_data = gain(player, activity_info.reward, const.BOX_SIGN)
    get_return(player, return_data, response.gain)

    player.sign_in_component.box_sign_in_prize.append(_id)
    player.sign_in_component.save_data()
    tlog_action.log('SignInBox', player, _id, activity_info.id)

    response.res.result = True
    logger.debug(response)
    return response.SerializePartialToString()
Exemplo n.º 42
0
def rob_treasure_truce_859(data, player):
    """夺宝休战"""
    args = rob_treasure_pb2.RobTreasureTruceRequest()
    args.ParseFromString(data)
    num = args.num

    response = rob_treasure_pb2.RobTreasureTruceResponse()

    price = game_configs.base_config.get('indianaIteam')
    is_afford_res = is_afford(player, price, multiple=num)  # 校验

    if not is_afford_res.get('result'):
        logger.error('rob_treasure_truce_859, item not enough')
        response.res.result = False
        response.res.result_no = is_afford_res.get('result_no')
        return response.SerializeToString()

    truce_item_num_day = player.rob_treasure.truce_item_num_day
    use_truce_item_max = game_configs.vip_config. \
        get(player.base_info.vip_level).indiana_TruceTime
    if (truce_item_num_day + num) > use_truce_item_max:
        logger.error('rob_treasure_truce_859, use item times not enough')
        response.res.result = False
        response.res.result_no = is_afford_res.get('result_no')
        return response.SerializeToString()

    use_num, use_time, use_num_day = player.rob_treasure.do_truce(num)
    return_data = consume(player,
                          price,
                          const.ROB_TREASURE_TRUCE,
                          multiple=num)
    get_return(player, return_data, response.consume)
    player.rob_treasure.save_data()
    tlog_action.log('RobTreasureTruce', player, num, use_num_day)

    response.truce_item_num = use_num
    response.start_truce = use_time
    response.truce_item_num_day = use_num_day

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 43
0
def get_online_gift_1121(data, player):
    """get online gift"""
    player.online_gift.check_time()

    request = online_gift_pb2.GetOnlineGift()
    request.ParseFromString(data)
    response = online_gift_pb2.GetOnlineGiftResponse()

    activity_online_gift = game_configs.activity_config.get(4)
    online_minutes = player.online_gift.online_time  # / 60

    if request.gift_id in player.online_gift.received_gift_ids:
        logger.error('repeat onilne gift:%s,%s',
                     player.online_gift.received_gift_ids,
                     request.gift_id)
        response.result = False
        return response.SerializeToString()

    for a in activity_online_gift:
        if request.gift_id == a['id']:
            if online_minutes >= a['parameterA']:
                gain_data = a['reward']
                return_data = gain(player, gain_data, const.ONLINE_GIFT)
                get_return(player, return_data, response.gain)

                data = dict(online_time=player.online_gift.online_time,
                            received_gift_ids=player.online_gift.received_gift_ids)
                player.online_gift.received_gift_ids.append(request.gift_id)
                # player.online_gift.reset()
                player.online_gift.save_data()
                tlog_action.log('OnlineGift', player, request.gift_id)

                response.result = True
                return response.SerializeToString()
            break
    else:
        logger.error('cant find gift id:%s', request.gift_id)

    response.result = False
    logger.error(response)
    return response.SerializeToString()
Exemplo n.º 44
0
def open_chest_1811(pro_data, player):
    request = stage_request_pb2.OpenStageChestRequest()
    request.ParseFromString(pro_data)
    stage_id = request.stage_id
    response = stage_response_pb2.OpenStageChestResponse()

    stage_type = 1
    if game_configs.stage_config.get('stages').get(stage_id):
        stage_config = game_configs.stage_config.get('stages').get(stage_id)
    if game_configs.special_stage_config.get('elite_stages').get(stage_id):
        stage_type = 2
        stage_config = game_configs.special_stage_config.get(
            'elite_stages').get(stage_id)

    if not stage_config:
        response.res.result = False
        response.res.result_no = 800
        return response.SerializePartialToString()

    stage_obj = player.stage_component.get_stage(stage_id)

    if stage_obj.chest_state:
        response.res.result = False
        response.res.result_no = 863
        return response.SerializePartialToString()

    if stage_obj.state != 1:
        response.res.result = False
        response.res.result_no = 864
        return response.SerializePartialToString()

    return_data = gain(player, stage_config.stageBox, const.StageChestGift)
    get_return(player, return_data, response.drops)

    stage_obj.chest_state = 1
    player.stage_component.save_data()
    tlog_action.log('OpenChest', player, stage_id, stage_type)

    response.res.result = True
    # logger.debug(response)
    return response.SerializePartialToString()
Exemplo n.º 45
0
def melting_equipment(equipment_ids, response, player):
    """熔炼
    @param dynamic_id:
    @param equipment_ids:
    @param kwargs:
    @return:
    """
    equipment_obj = player.equipment_component.get_equipment(equipment_ids)
    if not equipment_obj:
        return {'result': False, 'result_no': 401, 'message': u''}
    melting_items = equipment_obj.melting_item
    gain = item_group_helper.gain(player, melting_items)

    item_group_helper.get_return(player, gain, response.cgr)

    # 添加强化金币
    strength_coin = 0
    for record in equipment_obj.enhance_record.enhance_record:
        strength_coin += record[2]

    response.cgr.finance.coin += strength_coin
Exemplo n.º 46
0
def deal_auto_response(response, player):
    for (stage_id, item) in player.travel_component.auto.items():
        stage_travel = response.stage_travel.add()
        stage_travel.stage_id = stage_id
        for auto_info in item:
            auto_travel = stage_travel.auto_travel.add()
            auto_travel.start_time = auto_info.get('start_time')
            auto_travel.continued_time = auto_info.get('continued_time')
            auto_travel.already_times = auto_info.get('already_times')
            for tra in auto_info.get('events'):

                res_travel = auto_travel.travel.add()
                res_travel.state = tra[0]
                res_travel.event_id = tra[1]
                res_drops = res_travel.drops
                drop_data = get_drop_data(tra[2])
                get_return(player, drop_data, res_drops)
                if game_configs.travel_event_config.get('events').get(
                        tra[1] % xs).type == 1:
                    if len(tra) == 4:
                        res_travel.time = tra[3]
Exemplo n.º 47
0
def get_prize(player, mail_ids, response):
    """领取奖励"""
    for mail_id in mail_ids:
        mail = player.mail_component.get_mail(mail_id)
        if not mail:
            continue

        if mail.prize:
            if isinstance(eval(mail.prize), dict):
                prize = data_helper.parse(eval(mail.prize))
                return_data = gain(player, prize, const.MAIL)
                get_return(player, return_data, response.gain)
            elif isinstance(eval(mail.prize), list):
                for prize_data in eval(mail.prize):
                    prize = data_helper.parse(prize_data)
                    return_data = gain(player, prize, const.MAIL)
                    get_return(player, return_data, response.gain)
            continue
        if mail.config_id:
            # if mail.config_id != game_configs.base_config.get('warFogRobbedMail'):
                # 除了附文矿被抢
            mail_conf = game_configs.mail_config.get(mail.config_id)
            prize = data_helper.parse(mail_conf.rewards)
            return_data = gain(player, prize, const.MAIL)
            get_return(player, return_data, response.gain)
Exemplo n.º 48
0
def shop_oper(pro_data, player):
    """商城所有操作"""
    request = ShopRequest()
    request.ParseFromString(pro_data)
    response = ShopResponse()

    shop_id = request.id
    shop_item = shop_config.get(shop_id)

    if is_consume(player, shop_item):
        # 判断是否消耗
        result = is_afford(player, shop_item.consume)  # 校验
        if not result.get('result'):
            response.res.result = False
            response.res.result_no = result.get('result_no')
            response.res.message = u'消费不足!'
        return_data = consume(player, shop_item.consume)  # 消耗
        get_return(player, return_data, response.consume)
    return_data = gain(player, shop_item.gain)  # 获取
    extra_return_data = gain(player, shop_item.extraGain)  # 额外获取

    get_return(player, return_data, response.gain)
    get_return(player, extra_return_data, response.gain)

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 49
0
def do_hero_refine(player, hero_no, refine, response):
    if is_not_open(player, FO_REFINE):
        return {"result": False, "result_no": 837}
    hero = player.hero_component.get_hero(hero_no)
    _refine_item = game_configs.seal_config.get(refine)
    if not hero:
        logger.error('cant find hero:%s', hero_no)
        return {'result': False, 'result_no': 11801}
    if not _refine_item:
        logger.error('cant find refine item:%s', refine)
        return {'result': False, 'result_no': 11802}

    if _refine_item.get('heroLevelRestrictions') > hero.level:
        logger.error('refine player level is error:%s-%s',
                     _refine_item.get('heroLevelRestrictions'),
                     hero.level)
        return {'result': False, 'result_no': 11805}

    current_refine_item = game_configs.seal_config.get(hero.refine)
    if current_refine_item and _refine_item.id != current_refine_item.get('next'):
        logger.error('not next refine item:%s', refine)
        return {'result': False, 'result_no': 11803}

    result = is_afford(player, _refine_item.expend)  # 校验
    if not result.get('result'):
        logger.error('cant afford refine:%s:cur%s',
                     _refine_item.expend,
                     player.brew.nectar)
        return {'result': False, 'result_no': 11804}

    tlog_action.log('HeroRefine', player, hero_no, refine)

    return_data = consume(player, _refine_item.expend, const.HERO_REFINE)
    get_return(player, return_data, response.consume)

    hero.refine = refine
    player.brew.save_data()
    hero.save_data()

    return {'result': True}
Exemplo n.º 50
0
    def get_reward(self, act_id, response):
        """docstring for get_reward"""

        act_config_item = game_configs.activity_config.get(act_id)
        res_type = act_config_item.parameterE.keys()[0]
        act_item = self._add_act[act_config_item.type][res_type]
        logger.debug("act_item %s" % act_item)
        if act_item.get("num") < int(act_config_item.parameterA):
            logger.error("activity times not enough!")
            return dict(result=False, result_no=260101)
        stage_info = act_item["stages"]
        if act_id not in stage_info:
            logger.error("can not find activity!")
            return dict(result=False, result_no=260102)
        if stage_info.get(act_id):
            logger.error("activity has finished!")
            return dict(result=False, result_no=260103)
        stage_info[act_id] = True
        data = gain(self._owner, act_config_item.reward, const.ADD_ACTIVITY)
        get_return(self._owner, data, response.gain)
        self.save_data()
        return dict(result=True)
Exemplo n.º 51
0
def new_level_gift_840(data, player):
    """get online gift"""
    response = level_gift_pb2.NewLevelGiftResponse()
    response.res.result = False

    conf = game_configs.activity_config.get(5)

    for a in range(1, player.base_info.level + 1):
        if not player.level_gift.level_gift[a]:
            if conf.get(a):
                level_info = response.level_info.add()
                level_info.level = a

                gain_data = conf.get(a)['reward']
                return_data = gain(player, gain_data, const.NEW_LEVEL_GIFT)
                get_return(player, return_data, level_info.drops)
                player.level_gift.level_gift[a] = 1
                response.res.result = True

    player.level_gift.save_data()

    return response.SerializeToString()
Exemplo n.º 52
0
def get_task_reward_1822(data, player):
    """获取任务奖励"""
    args = task_pb2.TaskRewardRequest()
    args.ParseFromString(data)
    tid = args.tid
    response = task_pb2.TaskRewardResponse()

    player.task.update()

    task_conf = game_configs.achievement_config.get('tasks').get(tid)

    state = player.task.tasks.get(tid)
    if state and state == 3:
        response.res.result = False
        response.res.result_no = 800
        return response.SerializeToString()

    res = get_condition_info(player, task_conf)
    if state == 1 and not res.get('state'):
        response.res.result = False
        response.res.result_no = 800
        return response.SerializeToString()

    if player.base_info.is_firstday_from_register(
            const.OPEN_FEATURE_TASK) and task_conf.sort != 4:
        response.res.result = False
        logger.debug('error_no:150901')
        response.res.result_no = 150901
        return response.SerializeToString()

    gain_data = gain(player, task_conf.reward, const.TASK)
    get_return(player, gain_data, response.gain)
    player.task._tasks[tid] = 3
    player.task.save_data()

    response.tid = tid
    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 53
0
def draw_rebate_5433(data, player):
    """
    领取返利卡日常奖励
    """
    req = rebateDraw()
    req.ParseFromString(data)
    response = rebateResp()
    response.rid = req.rid
    response.res.result = True
    recharge_item = None
    plat = 'ios'
    if player.base_info.plat_id == 1:
        plat = 'android'
    for item in game_configs.recharge_config[plat].values():
        if item.get('id') == req.rid:
            recharge_item = item
    if recharge_item and recharge_item.get('type') == 2:
        _, last, can_draw = player.rebate.rebate_status(
            req.rid, recharge_item.get('giftDays'))
        if last > 0 and can_draw:
            rebate = player.rebate.rebate_info(req.rid)
            rebate.draw()
            player.rebate.set_rebate(req.rid, rebate)
            player.rebate.save_data()
            day_reward = data_helper.parse(recharge_item.get('everydayGift'))
            return_data = gain(player, day_reward, const.RECHARGE)  # 获取
            get_return(player, return_data, response.gain)
            tlog_action.log('DrawRebate', player, req.rid)
        else:
            response.res.result = False
            response.res.result_no = 54332
    else:
        response.res.result = False
        response.res.result_no = 54331
    print 'draw_rebate_5433', response
    return response.SerializePartialToString()
Exemplo n.º 54
0
    def func():
        player.sign_in_component.sign_in(day)
        player.sign_in_component.save_data()
        sign_round = player.sign_in_component.sign_round
        print game_configs.sign_in_config.get(sign_round), "---------"
        print game_configs.sign_in_config.get(sign_round).get(day), "-------"
        if not game_configs.sign_in_config.get(
                sign_round) or not game_configs.sign_in_config.get(
                    sign_round).get(day):
            return
        sign_in_info = game_configs.sign_in_config.get(sign_round).get(day)

        #vip双倍
        if player.base_info.vip_level > 0 and \
                sign_in_info.get("vipDouble") and \
                player.base_info.vip_level >= sign_in_info.get("vipDouble"):
            is_double = 1
        else:
            is_double = 0

        if is_double:
            return_data = gain(player,
                               sign_in_info.get("reward"),
                               const.REPAIR_SIGN,
                               multiple=2)
            get_return(player, return_data, response.gain)
        else:
            return_data = gain(player, sign_in_info.get("reward"),
                               const.REPAIR_SIGN)
            get_return(player, return_data, response.gain)

        player.sign_in_component.repair_sign_in_times += 1
        player.sign_in_component.save_data()
        tlog_action.log('RepairSignIn', player, day,
                        len(player.sign_in_component.sign_in_days),
                        sign_in_info.get("id"))
Exemplo n.º 55
0
def add_reward_2104(pro_data, player):
    """
    获取累积奖励
    request:HjqyAddRewardRequest
    response:HjqyAddRewardResponse
    """
    # 检查是否可领取
    request = hjqy_pb2.HjqyAddRewardRequest()
    request.ParseFromString(pro_data)
    response = hjqy_pb2.HjqyAddRewardResponse()

    damage_hp = remote_gate['world'].hjqy_damage_hp_remote(player.base_info.id)
    hjqy_info = game_configs.hjqy_config.get(request.id)

    if hjqy_info.output_requirements > damage_hp:
        logger.debug("damage_hp is not enough!")
        response.res.result = False
        response.res.result_no = 21041
        return response.SerializePartialToString()

    # 检查奖励是否被领取
    if request.id in player.hjqy_component.received_ids:
        logger.debug("has got the reward!")
        response.res.result = False
        response.res.result_no = 21042
        return response.SerializePartialToString()

    # 掉落
    data = gain(player, hjqy_info.get("rewards"), const.HJQY_ADD_REWARD)
    get_return(player, data, response.gain)

    # 保存已经获取的id
    player.hjqy_component.received_ids.append(request.id)
    player.hjqy_component.save_data()
    response.res.result = True
    return response.SerializePartialToString()
Exemplo n.º 56
0
def soul_shop_506(pro_data, player):
    """武魂商店"""
    request = SoulShopRequest()
    request.ParseFromString(pro_data)
    response = SoulShopResponse()
    common_response = response.res
    shop_id = request.id

    print "soul shop id:", shop_id
    shop_item = soul_shop_config.get(shop_id)
    result = is_afford(player, shop_item.consume)  # 校验
    if not result.get('result'):
        common_response.result = False
        common_response.result_no = result.get('result_no')
        common_response.message = u'消费不足!'

    consume_return_data = consume(player, shop_item.consume)  # 消耗

    return_data = gain(player, shop_item.gain)  # 获取
    # extra_return_data = gain(player, shop_item.extra_gain)  # 额外获取
    get_return(player, consume_return_data, response.consume)
    get_return(player, return_data, response.gain)
    # get_return(player, extra_return_data, response)

    try:
        player.soul_shop.item_ids.remove(shop_id)
        player.soul_shop.save_data()
    except Exception:
        logger.debug("can not find shop id:" + str(shop_id) +
                     str(player.soul_shop.item_ids))
        common_response.result = False
        common_response.result_no = 501
        return response.SerializeToString()

    common_response.result = True
    return response.SerializeToString()
Exemplo n.º 57
0
def draw_friend_lively_1199(data, player):
    request = friend_pb2.DrawRewardReq()
    request.ParseFromString(data)
    response = friend_pb2.DrawRewardRsp()
    response.fid = request.fid
    today = time.strftime("%Y%m%d", time.localtime(time.time()))
    stat, update = player.friends.get_reward(request.fid, today)
    if stat:
        response.res.result = False
        response.res.result_no = 11991  # 已领取
    else:
        player_data = tb_character_info.getObj(request.fid)
        friend_data = player_data.hmget(['conditions_day', 'last_day'])
        conditions_day = friend_data.get('conditions_day', {})
        lively = conditions_day.get(24, 0)
        if today != time.strftime(
                "%Y%m%d", time.localtime(friend_data.get('last_day', '0'))):
            lively = 0
        if lively < game_configs.base_config['friendActivityValue']:
            logger.debug('error_no:11992,lively:%d' % lively)
            response.res.result = False
            response.res.result_no = 11992  # 未完成
        else:
            response.res.result = True
            reward = game_configs.base_config['friendActivityReward']
            lively_reward = data_helper.parse(reward)
            return_data = gain(player, lively_reward,
                               const.LIVELY_REWARD)  # 获取
            get_return(player, return_data, response.gain)
            player.friends.set_reward(request.fid, today, 1)
            update = True

    if update:
        player.friends.save_data()

    return response.SerializePartialToString()
Exemplo n.º 58
0
def rob_treasure_reward_863(data, player):
    """选择战利品"""
    response = rob_treasure_pb2.RobTreasureRewardResponse()
    if not player.rob_treasure.can_receive:
        logger.error('rob_treasure_reward_863, can not receive')
        response.res.result = False
        response.res.result_no = 800
        return response.SerializeToString()

    indiana_conf = game_configs.indiana_config.get('indiana').get(
        player.rob_treasure.can_receive)
    common_bag = BigBag(indiana_conf.reward)
    drops = common_bag.get_drop_items()

    # drops = []
    # common_bag = BigBag(self._common_drop)
    # common_drop = common_bag.get_drop_items()
    # drops.extend(common_drop)

    x = [0, 1, 2]
    random.shuffle(x)
    return_data = [[
        drops[x[0]].item_type, drops[x[0]].num, drops[x[0]].item_no
    ]]
    # gain(player, [drops[x[0]]], const.ROB_TREASURE_REWARD)
    get_return(player, return_data, response.look_gain.add())

    # return_data = gain(player, [drops[x[1]]], const.ROB_TREASURE_REWARD)
    return_data = [[
        drops[x[1]].item_type, drops[x[1]].num, drops[x[1]].item_no
    ]]
    get_return(player, return_data, response.look_gain.add())

    return_data = gain(player, [drops[x[2]]], const.ROB_TREASURE_REWARD)
    get_return(player, return_data, response.gain)

    player.rob_treasure.can_receive = 0
    player.rob_treasure.save_data()

    response.res.result = True
    return response.SerializeToString()
Exemplo n.º 59
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.º 60
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