示例#1
0
    def on_sign_in(self, uid, gid, mi):
        mo = MsgPack(Message.MSG_SYS_SIGN_IN | Message.ID_ACK)
        conf = Context.Configure.get_game_item_json(gid, 'login.reward')
        if not conf:
            Context.Log.error('miss config')
            return mo.set_error(1, 'miss config')

        now_day, last_login, ns_login = FishAccount.get_login_info(uid, gid)
        if now_day == last_login:
            return mo.set_error(2, 'already sign in')
        elif now_day == last_login + 1:  # 连续登陆
            ns_login += 1
        else:
            ns_login = 0
        FishAccount.set_login_info(uid, gid, now_day, ns_login)
        vip_level = FishAccount.get_vip_level(uid, gid)

        if vip_level:
            conf = conf['vip']
        else:
            conf = conf['common']
        reward = conf[ns_login % len(conf)]
        real, final = Context.UserAttr.incr_chip(uid, gid, reward,
                                                 'signin.reward')

        pipe_args = []
        delta_chip = real
        # 领取月卡奖励
        success, left_days = FishProps.use_vip(uid, gid)
        if success:
            conf = Context.Configure.get_game_item_json(
                gid, 'month.card.reward')
            reward = FishProps.issue_rewards(uid, gid, conf,
                                             'month.card.reward')
            if 'diamond' in reward:
                mo.set_param('diamond', reward['diamond'])
                pipe_args.append('login.carrying.volume.diamond')
                pipe_args.append(reward['reward']['diamond'])
            if 'coupon' in reward:
                mo.set_param('coupon', reward['coupon'])
                pipe_args.append('login.carrying.volume.coupon')
                pipe_args.append(reward['reward']['coupon'])
            if 'chip' in reward:
                final = reward['chip']
                delta_chip += reward['reward']['chip']

        pipe_args.append('login.carrying.volume.chip')
        pipe_args.append(delta_chip)
        pipe_args.append('carrying.volume.chip')
        pipe_args.append(delta_chip)
        Context.Daily.mincr_daily_data(uid, gid, *pipe_args)

        if vip_level:
            vip_conf = Context.Configure.get_game_item_json(
                gid, 'vip.config')[vip_level - 1]
            stone_count = vip_conf.get('stone', 0)
            if stone_count:
                FishProps.mincr_props(uid, gid, 'vip_reward', 215, stone_count,
                                      216, stone_count, 217, stone_count, 218,
                                      stone_count)
            chip_num = vip_conf.get('chip')
            if chip_num and chip_num > final:
                add_num = chip_num - final
                real, final = Context.UserAttr.incr_chip(
                    uid, gid, add_num, 'vip_reward')
        if final:
            mo.set_param('chip', final)
        return mo
示例#2
0
    def on_product_deliver(self, uid, gid, mi):
        orderId = mi.get_param('orderId')
        productId = mi.get_param('productId')
        payType = mi.get_param('payType')
        channel = mi.get_param('channel')
        cost = mi.get_param('cost')
        param = {
            'orderId': orderId,
            'productId': productId,
            'payType': payType,
            'channel': channel,
            'cost': cost
        }
        Context.Log.report('product.issue: [%d, %d, %s, %s]' %
                           (uid, gid, orderId, param))
        all_product = Context.Configure.get_game_item_json(
            gid, 'product.config')
        if productId not in all_product:
            Context.Log.error('productId not exist', orderId, productId,
                              all_product)
            return MsgPack.Error(0, 1, 'no product found')

        shop_config = Context.Configure.get_game_item_json(gid, 'shop.config')

        pipe_args = ['product_%s' % productId, 1]
        times = Context.Data.hincr_game(uid, gid, 'product_%s' % productId, 1)

        # 记录充值相关字段
        pay_total = FishProps.incr_pay(uid,
                                       gid,
                                       cost,
                                       'buy.product',
                                       orderId=orderId)
        today_pay_times, _ = Context.Daily.mincr_daily_data(
            uid, gid, 'pay_times', 1, 'pay_total', cost)

        is_reset_chance, is_first_double = False, False
        if productId in shop_config['chip']:
            if times == 1:
                is_first_double = True
            else:
                reset_choice = Context.Data.get_game_attr_int(
                    uid, gid, 'reset_' + str(productId), 0)
                if reset_choice:
                    is_reset_chance = True

        product = all_product[productId]
        if is_reset_chance:  # reset chance
            reward = self.__rebate_reward(gid, pay_total, product['first'],
                                          channel)
            FishProps.issue_rewards(uid,
                                    gid,
                                    reward,
                                    'buy.product',
                                    orderId=orderId,
                                    reset=1)
            Context.Data.del_game_attrs(uid, gid, 'reset_' + str(productId))
        elif is_first_double:
            reward = self.__rebate_reward(gid, pay_total, product['first'],
                                          channel)
            FishProps.issue_rewards(uid,
                                    gid,
                                    reward,
                                    'buy.product',
                                    orderId=orderId,
                                    first=1)
        elif productId in shop_config['card']:
            state, days = FishProps.incr_vip(uid,
                                             gid,
                                             30,
                                             'buy.product',
                                             orderId=orderId)
            if state == 0:  # 今日未领取
                sign_in = Context.Daily.get_daily_data(uid, gid, 'sign_in')
                if sign_in:
                    success, left_days = FishProps.use_vip(uid, gid)
                    if success:
                        conf = Context.Configure.get_game_item_json(
                            gid, 'month.card.reward')
                        FishProps.issue_rewards(uid, gid, conf,
                                                'month.card.reward')
        else:
            reward = self.__rebate_reward(gid, pay_total, product['content'],
                                          channel)
            FishProps.issue_rewards(uid,
                                    gid,
                                    reward,
                                    'buy.product',
                                    orderId=orderId)

        if today_pay_times == 1:  # today first pay
            pipe_args.append(channel + '.pay.user.count')
            pipe_args.append(1)
        pipe_args.append(channel + '.pay.user.pay_total')
        pipe_args.append(cost)
        pipe_args.append(channel + '.user.pay.times')
        pipe_args.append(1)

        if pay_total == cost:  # life first pay
            pipe_args.append(channel + '.new.pay.user.count')
            pipe_args.append(1)
            pipe_args.append('new_pay_user')
            pipe_args.append(1)
            new_pay_user = 1
        else:
            new_pay_user = Context.Daily.get_daily_data(
                uid, gid, 'new_pay_user')

        if new_pay_user:
            pipe_args.append(channel + '.new.pay.user.pay_total')
            pipe_args.append(cost)

        Context.Stat.mincr_daily_data(gid, *pipe_args)

        key = 'game.%d.info.hash' % gid
        pipe_args = []
        if pay_total == cost:
            pipe_args.append(channel + '.pay.user.count')
            pipe_args.append(1)

        pipe_args.append(channel + '.pay.user.pay_total')
        pipe_args.append(cost)
        pipe_args.append(channel + '.user.pay.times')
        pipe_args.append(1)
        Context.RedisMix.hash_mincrby(key, *pipe_args)

        self.__handle_pay_effect(uid, gid, cost, today_pay_times)

        return MsgPack(0, {'msg': u'已到货'})