def get_ranks(self, uid, gid, mi): rank_name = mi.get_param('rank') if not rank_name: rank_name = ['chip', 'exp'] elif isinstance(rank_name, (str, unicode)): rank_name = [rank_name] start = mi.get_param('start', 0) end = mi.get_param('end', 49) if start < 0 or end < start: return if end - start > 49: end = start + 49 mo = MsgPack(Message.MSG_SYS_RANK_LIST | Message.ID_ACK) rank_list, mine = {}, {} if 'chip' in rank_name: _, rank_list['chip'] = self.get_chip_rank_list( uid, gid, start, end) if 'exp' in rank_name: _, rank_list['exp'] = self.get_exp_rank_list(uid, gid, start, end) mo.update_param(rank_list) if 'chip' in rank_list or 'exp' in rank_list: _info = self.__get_user_info(uid, gid) mine.update(_info) if mine: mo.set_param('mine', mine) return mo
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
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
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)
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')
def onGameInfo(self, uid, gid, mi): gid = mi.get_param('gameId') mo = MsgPack(Message.MSG_SYS_GAME_INFO | Message.ID_ACK) account = Context.get_module(gid, 'account', Account) is_new, data = account.get_game_info(uid, gid) if not data: mo.set_error(-1, 'no game info') else: mo.update_param(data) if is_new: mo.set_param('new', 1) info = Context.RedisCache.hash_mget('global.notice', 'led', 'start', 'end') led = info[0] if led: now_ts = Time.current_ts() start = int(info[1]) end = int(info[2]) if start < now_ts < end: mo.set_param('global_notice', { 'list': [led], 'end': end, 'now_ts': now_ts }) Context.GData.send_to_connect(uid, mo) if is_new: account.on_create_user(uid, gid) if account.auto_issue_benefit: benefit_config = Context.Configure.get_game_item_json( gid, 'benefit.config') if benefit_config and benefit_config['limit'] > data['chip']: benefit = Context.Daily.issue_benefit(uid, gid) mo = MsgPack(Message.MSG_SYS_BENEFIT | Message.ID_NTF) if not benefit: benefit = { 'which': 0, 'total': 0, 'reward': 0, 'chip': data['chip'], } mo.update_param(benefit) Context.GData.send_to_connect(uid, mo)
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
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
def on_benefit(self, uid, gid, mi): mo = MsgPack(Message.MSG_SYS_BENEFIT | Message.ID_ACK) conf = Context.Configure.get_game_item_json(gid, 'benefit.config') total_times = len(conf['reward']) benefit_times, bankrupt_ts = Context.Daily.get_daily_data( uid, gid, 'benefit_times', 'bankrupt_ts') benefit_times = Tool.to_int(benefit_times, 0) if benefit_times >= total_times: return mo.set_error(1, 'none') now_ts = Time.current_ts() if not bankrupt_ts or int(bankrupt_ts) > now_ts: return mo.set_error(2, 'wait') result = Context.Daily.issue_benefit(uid, gid) if not result: return mo.set_error(3, 'failed') Context.Daily.del_daily_data(uid, gid, 'bankrupt_ts') mo.update_param(result) return mo
def query_user_info(self, gid, mi, request): uid = mi.get_param('userId') user_attrs = ['createTime', 'deviceId', 'nick', 'idType', 'userName', 'channel', 'platform'] kvs = Context.Data.get_attrs_dict(uid, user_attrs) game_attrs = ['pay_total', 'session_login', 'exp', 'barrel_level', 'chip', 'diamond', 'in_chip', 'out_chip'] _kvs = Context.Data.get_game_attrs_dict(uid, gid, game_attrs) kvs.update(_kvs) kvs['chip'] = int(kvs.get('chip', 0)) kvs['in_chip'] = int(kvs.get('in_chip', 0)) kvs['out_chip'] = int(kvs.get('out_chip', 0)) kvs['diamond'] = int(kvs.get('diamond', 0)) dt = Time.str_to_datetime(kvs['createTime'], '%Y-%m-%d %X.%f') kvs['createTime'] = Time.datetime_to_str(dt, '%Y-%m-%d %X') dt = Time.str_to_datetime(kvs['session_login'], '%Y-%m-%d %X.%f') kvs['session_login'] = Time.datetime_to_str(dt, '%Y-%m-%d %X') if int(kvs['idType']) == 13: kvs['phone'] = kvs['userName'] kvs['pay_total'] = int(kvs.get('pay_total', 0)) kvs['vip_level'] = FishAccount.get_vip_level(uid, gid, pay_total=int(kvs['pay_total'])) exp = int(kvs['exp']) kvs['level'], _ = FishAccount.get_exp_info(uid, gid, exp=exp) barrel_level = int(kvs['barrel_level']) kvs['barrel_multiple'] = FishAccount.trans_barrel_level(gid, barrel_level) l = (201, 202, 203, 204, 205, 211, 212, 213, 214, 215, 216, 217, 218, 219) _list = FishProps.get_props_list(uid, gid, l) props_map = dict(_list) props_list = [] for i in l: count = props_map.get(i, 0) props_list.append(count) kvs['props'] = props_list mo = MsgPack(0) mo.update_param(kvs) return mo
def onUserInfo(self, uid, gid, mi): mo = MsgPack(Message.MSG_SYS_USER_INFO | Message.ID_ACK) account = Context.get_module(gid, 'account', Account) data = account.get_user_info(uid, gid) if not data: mo.set_error(-1, 'no user info') else: mo.update_param(data) login = mi.get_param('login') if login: account.on_user_login(uid, gid) result, loc = Online.get_location(uid, gid) if result and loc: loc = { 'roomType': loc['room_type'], 'tableId': loc['table_id'], 'seatId': loc['seat_id'] } mo.set_param('loc', loc) return Context.GData.send_to_connect(uid, mo)