示例#1
0
    def on_use_props(self, uid, gid, mi):
        _id = mi.get_param('id')
        _count = mi.get_param('count')
        mo = MsgPack(Message.MSG_SYS_USE_PROPS | Message.ID_ACK)
        if _id not in [
                FishProps.PROP_EGG_BRONZE, FishProps.PROP_EGG_SILVER,
                FishProps.PROP_EGG_GOLD, FishProps.PROP_EGG_COLOR
        ]:
            return mo.set_error(1, 'can not use')

        if not isinstance(_count, int) or _count <= 0:
            return mo.set_error(2, 'count error')

        conf = FishProps.get_config_by_id(gid, _id)
        if not conf:
            Context.Log.error('not found props:', uid, gid, _id, _count)
            return mo.set_error(4, 'not found props')

        real, final = FishProps.incr_props(uid, gid, _id, -_count,
                                           'entity.use')
        if real != -_count:
            return mo.set_error(3, 'not enough')

        if _count == 1:
            reward = conf['content']
        else:
            reward = FishProps.merge_reward(*[conf['content']] * _count)
        reward = Context.copy_json_obj(reward)
        reward = self.deal_reward(reward)
        reward = FishProps.issue_rewards(uid, gid, reward, 'entity.use')
        reward = FishProps.convert_reward(reward)
        mo.update_param(reward)
        return mo
示例#2
0
 def on_consume_cdkey(self, uid, gid, mi):
     code = mi.get_param('code')
     imei = mi.get_param('imei')
     timestamp = (int(time.time()))
     # data = {'appId': 1002, 'code': code, 'userChannel': 0, 'imei': imei, 'userId': uid,'timestamp': timestamp ,'token':'asdsd'}
     data = 'code=' + str(code) + '&' + 'userId=' + str(
         uid) + '&' + 'timestamp=' + str(timestamp) + '&token=asdsd'
     cdkey_server_url = Context.Configure.get_game_item(
         gid, 'cdkey.server.url')
     Context.Log.info("cdkey_server_url:", cdkey_server_url)
     result = Context.WebPage.wait_for_json(cdkey_server_url, postdata=data)
     mo = MsgPack(Message.MSG_SYS_CONSUME_CDKEY | Message.ID_ACK)
     if result['result'] != 1:  # 错误
         mo.set_error(result['result'])
     else:
         try:
             Context.Log.info("desc:", result['desc'])
             reward = self.__convert_cdkey_desc(result['desc'])
             rewards = FishProps.issue_rewards(uid, gid, reward,
                                               'cdkey.reward')
             _rewards = FishProps.convert_reward(rewards)
             mo.update_param(_rewards)
         except Exception, e:
             Context.Log.exception(uid, gid, result)
             return
示例#3
0
    def on_create_user(cls, uid, gid):
        super(FishAccount, cls).on_create_user(uid, gid)
        # 发放一级礼包
        conf = Context.Configure.get_game_item_json(gid, 'exp.level.reward')
        rewards_info = FishProps.issue_rewards(uid, gid, conf[0],
                                               'exp.upgrade')
        rewards_info = FishProps.convert_reward(rewards_info)
        mo = MsgPack(Message.FISH_MSG_EXP_UPGRADE | Message.ID_NTF)
        mo.set_param('exp', 0)
        mo.set_param('lv', 1)
        mo.set_param('df', [1, [0, conf[1]]])
        mo.update_param(rewards_info)
        Context.GData.send_to_connect(uid, mo)

        # new user carrying
        pipe_args = []
        for k in ('chip', 'diamond', 'coupon'):
            if k in rewards_info:
                pipe_args.append('login.carrying.volume.%s' % k)
                pipe_args.append(rewards_info[k])
        if 'chip' in rewards_info:
            pipe_args.append('carrying.volume.chip')
            pipe_args.append(rewards_info['chip'])
        if pipe_args:
            Context.Stat.mincr_daily_data(gid, *pipe_args)
示例#4
0
    def on_raffle(self, uid, gid, mi):
        _id = mi.get_param('i')
        _button = mi.get_param('bt')
        mo = MsgPack(Message.MSG_SYS_RAFFLE | Message.ID_ACK)
        raffle_config = Context.Configure.get_game_item_json(
            gid, 'raffle.config')
        raffle_config = Context.copy_json_obj(raffle_config)
        loop_config = raffle_config['loop']
        raffle_config = raffle_config['config']
        class_pool, loop_times = Context.Daily.get_daily_data(
            uid, gid, 'fake.bonus.count', 'bonus.loop.times')
        class_pool = Tool.to_int(class_pool, 0)
        loop_times = Tool.to_int(loop_times, 0)
        if loop_times > len(loop_config) - 1:
            this_count = loop_config[-1]
        else:
            this_count = loop_config[loop_times]
        if class_pool < this_count:
            return mo.set_error(1, 'lack fish')

        for item in raffle_config:
            if item['id'] == _id:
                bonus_pool = Context.Data.get_game_attr_int(
                    uid, gid, 'bonus_pool', 0)
                if bonus_pool < item['limit']:
                    return mo.set_error(2, 'lack chip')
                # 发放奖励
                index, which = Algorithm.choice_by_ratio(item['reward'],
                                                         10000,
                                                         func=lambda l: l[0])
                reward = FishProps.issue_rewards(uid, gid, which[1],
                                                 'bonus.raffle')
                mo.set_param('bt', _button)
                mo.set_param('i', index + 1)
                rw = FishProps.convert_reward(reward)
                mo.update_param(rw)
                # 重置数据
                pipe_args = [
                    'fake.bonus.count', -class_pool, 'bonus.loop.times', 1
                ]
                Context.Daily.mincr_daily_data(uid, gid, *pipe_args)
                Context.Data.hincr_game(uid, gid, 'bonus_pool', -bonus_pool)
                self.__pub_raffle_led(uid, gid, item['name'], reward)
                return mo

        return mo.set_error(3, 'error id')
示例#5
0
    def on_consume_task(self, uid, gid, mi):
        _id = mi.get_param('id')
        mo = MsgPack(Message.MSG_SYS_CONSUME_TASK | Message.ID_ACK)
        task_list = Context.Daily.get_daily_data(uid, gid, 'task.list')
        if not task_list:
            return mo.set_error(1, 'no task')

        task_list = Context.json_loads(task_list)
        degree = 0
        for task in task_list:
            if task['type'] == 1:
                count = Context.Daily.get_daily_data(uid, gid, 'fish.' + str(task['fish_type']))
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 2:
                count = Context.Daily.get_daily_data(uid, gid, 'class.boss')
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 3:
                count = Context.Daily.get_daily_data(uid, gid, 'class.bonus')
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 11:
                count = Context.Daily.get_daily_data(uid, gid, 'win.chip')
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 21:
                degree += task['degree']

            if 'count' in task and task['count'] >= task['total']:
                task['done'] = 1
                degree += task['degree']

        conf = Context.Configure.get_game_item_json(gid, 'task.config')
        for i, reward in enumerate(conf['reward']):
            if i == _id:
                if degree < reward['degree']:
                    return mo.set_error(2, 'not done')
                state = Context.Daily.incr_daily_data(uid, gid, 'task.reward.%d' % _id, 1)
                if state > 1:
                    return mo.set_error(3, 'received')
                reward = FishProps.issue_rewards(uid, gid, reward['reward'], 'task.reward.%d' % _id)
                _reward = FishProps.convert_reward(reward)
                mo.update_param(_reward)
                break
        else:
            mo.set_error(4, 'error id')

        return mo
示例#6
0
    def on_props_list(self, uid, gid, mi):
        props_list = FishProps.get_props_list(uid, gid)
        info = {
            'c': Context.UserAttr.get_chip(uid, gid, 0),
            'd': Context.UserAttr.get_diamond(uid, gid, 0),
            'o': Context.UserAttr.get_coupon(uid, gid, 0)
        }
        if props_list:
            info['p'] = props_list

        # 升级礼包
        conf = Context.Configure.get_game_item_json(gid, 'exp.level.reward')
        level, _ = FishAccount.get_exp_info(uid, gid)
        if level < len(conf):
            info['up'] = FishProps.convert_reward(conf[level])

        mo = MsgPack(Message.MSG_SYS_PROPS_LIST | Message.ID_ACK)
        mo.update_param(info)
        return mo
示例#7
0
    def on_task_list(self, uid, gid, mi):
        conf = Context.Configure.get_game_item_json(gid, 'task.config')
        task_list = Context.Daily.get_daily_data(uid, gid, 'task.list')
        if task_list:
            task_list = Context.json_loads(task_list)
        else:
            what_day = Time.weekday(today=True)
            task_types = conf['daily'][what_day]
            task_map = {}
            for task in conf['task']:
                task_map[task['type']] = task
            total_degree, task_list = 0, []
            for i, task_type in enumerate(task_types):
                task = {'id': i, 'type': task_type}
                if task_type == 2:  # boss
                    task['total'] = random.randint(*task_map[task_type]['range'])
                    task['desc'] = task_map[task_type]['desc']
                    task['degree'] = task_map[task_type]['degree']
                elif task_type == 3:
                    task['total'] = random.randint(*task_map[task_type]['range'])
                    task['desc'] = task_map[task_type]['desc']
                    task['degree'] = task_map[task_type]['degree']
                elif task_type == 11:
                    barrel_level = Context.Data.get_game_attr_int(uid, gid, 'barrel_level', 1)
                    task['total'] = random.randint(*task_map[task_type]['range']) * barrel_level
                    task['desc'] = task_map[task_type]['desc']
                    task['degree'] = task_map[task_type]['degree']
                elif task_type == 21:
                    task['desc'] = task_map[task_type]['desc']
                    task['degree'] = task_map[task_type]['degree']
                elif task_type == 31:
                    task['desc'] = task_map[task_type]['desc']
                    task['degree'] = task_map[task_type]['degree']
                else:
                    break
                total_degree += task['degree']
                task_list.append(task)

            if total_degree < conf['total_degree']:
                fish_config = Context.Configure.get_game_item_json(gid, 'fish.201.config')
                fish_config = Context.copy_json_obj(fish_config)
                while total_degree < conf['total_degree']:  # 普通鱼填充, 直到达到最大活跃值
                    task_type = 1
                    task = {'id': len(task_list), 'type': task_type}
                    index = random.randrange(0, len(fish_config['common']))
                    fish = fish_config['common'][index]
                    del fish_config['common'][index]
                    task['total'] = random.randint(*task_map[task_type]['range'])
                    task['desc'] = task_map[task_type]['desc']
                    task['fish_type'] = fish['type']
                    if isinstance(task_map[task_type]['degree'], list):
                        for rg in task_map[task_type]['degree']:
                            if task['total'] >= rg[0]:
                                task['degree'] = rg[1]
                                break
                        else:
                            task['degree'] = task_map[task_type]['degree'][-1][1]
                    else:
                        task['degree'] = task_map[task_type]['degree']
                    total_degree += task['degree']
                    task_list.insert(0, task)

            Context.Daily.set_daily_data(uid, gid, 'task.list', Context.json_dumps(task_list))

        rewards, degree = [], 0
        for task in task_list:
            if task['type'] == 1:
                count = Context.Daily.get_daily_data(uid, gid, 'fish.' + str(task['fish_type']))
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 2:
                count = Context.Daily.get_daily_data(uid, gid, 'class.boss')
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 3:
                count = Context.Daily.get_daily_data(uid, gid, 'class.bonus')
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 11:
                count = Context.Daily.get_daily_data(uid, gid, 'win.chip')
                task['count'] = Tool.to_int(count, 0)
            elif task['type'] == 21:
                task['done'] = 1
                degree += task['degree']

            if 'count' in task and task['count'] >= task['total']:
                task['done'] = 1
                degree += task['degree']

        # 处理奖励
        _ids = range(len(conf['reward']))
        for i, _id in enumerate(_ids):
            _ids[i] = 'task.reward.%d' % _id

        _states = Context.Daily.get_daily_data(uid, gid, *_ids)
        for _state, reward in zip(_states, conf['reward']):
            _state = 1 if _state else 0
            _reward = FishProps.convert_reward(reward['reward'])
            rewards.append({'degree': reward['degree'], 'state': _state, 'reward': _reward})

        mo = MsgPack(Message.MSG_SYS_TASK_LIST | Message.ID_ACK)
        mo.set_param('tasks', task_list)
        mo.set_param('reward', rewards)
        mo.set_param('degree', degree)
        return mo