def update_dungeon_info(self,dungeon_type,floor_id,room_id, once_daily = False): """ 更新用户的战场信息 """ #通关奖励 clear_floor_coin = 0 #如果是普通战场 if dungeon_type == 'normal': #所完成战场是该用户当前的最新战场时,更新最新战场信息 normal_current = self.dungeon_info['normal_current'] if floor_id == normal_current['floor_id'] and \ room_id == normal_current['room_id'] and normal_current['status'] != 2: conf = self.game_config.normal_dungeon_config #有下一局时,更新为下一局 if str(int(room_id) + 1) in conf[floor_id]['rooms']: #更新当前最新战场为下一局 self.dungeon_info['normal_current']['room_id'] = str(int(room_id) + 1) #没有下一局时,当前场clear else: #有下一场时,更新为下一场,局数从1开始 if str(int(floor_id) + 1) in conf: self.dungeon_info['normal_current']['floor_id'] = str(int(floor_id) + 1) self.dungeon_info['normal_current']['room_id'] = '1' else: #没有下一场时,只标识当前场clear self.dungeon_info['normal_current']['status'] = 2 #赠送元宝 clear_floor_coin = UserProperty.get(self.uid).dungeon_clear() self.clear_normal_dungeon(str(floor_id)) elif dungeon_type == 'special' or dungeon_type == 'weekly' or dungeon_type == 'daily': self.__resolve_once_daily(floor_id, room_id, dungeon_type, once_daily) #活动战场时,更新最短通关时间 if self.dungeon_info[dungeon_type][floor_id]['rooms'].get(room_id,0) != 2: self.dungeon_info[dungeon_type][floor_id]['rooms'][room_id] = 2 #全部小关卡clear并且该战场没有clear时 if self.dungeon_info[dungeon_type][floor_id]['status'] != 2: clear_fg = True for rmid in self.dungeon_info[dungeon_type][floor_id]['rooms']: if self.dungeon_info[dungeon_type][floor_id]['rooms'][rmid] != 2: clear_fg = False break if clear_fg: self.dungeon_info[dungeon_type][floor_id]['status'] = 2 #赠送元宝 clear_floor_coin = UserProperty.get(self.uid).dungeon_clear() #清除未完成的迷宫信息 self.dungeon_info['last'] = {} self.put() data = { 'normal_current':self.dungeon_info['normal_current'], # 'special':self.dungeon_info['special'], # 'weekly':self.dungeon_info.get('weekly',{}), 'daily':self.dungeon_info.get('daily',{}), } if clear_floor_coin: data['clear_floor_coin'] = clear_floor_coin return data
def get_friend_list(rk_user,params): """获取好友列表 """ data = {'friends':[]} user_friend_obj = Friend.get(rk_user.uid) for fid in user_friend_obj.get_friend_ids(): friend_user = UserBase.get(fid) friend_property = UserProperty.get(fid) leader_card = friend_property.leader_card user_pvp_obj = UserPvp.getEx(fid) if user_pvp_obj: pvp_title = user_pvp_obj.pvp_title else: pvp_title = '' temp = { 'fid':fid, 'name':friend_user.username, 'country':friend_property.country, 'leader_card':leader_card, 'lv':friend_property.lv, 'login_time':friend_property.login_time, 'want_gift':Friend.getEx(fid).friend_gift.get('want_gift',['','','']), 'signature':friend_user.signature, 'lock':user_friend_obj.is_lock(fid), 'pvp_title':pvp_title, } data['friends'].append(temp) data['now_num'] = len(data['friends']) data['max_num'] = rk_user.user_property.max_friend_num return 0,data
def add_exp_point(rk_user, params): ''' 添加经验点接口 根据用户提交的道具 id 给用户添加经验点 ''' props_id = params['props_id'] num = int(params['num']) #根据 id 获取道具的使用途径 props_id_config = game_config.props_config.get(props_id, {}) used_by = props_id_config.get('used_by', '') #判断使用的用途 if used_by != 'card': return 11, {'msg': utils.get_msg('pack', 'wrong_used')} #判断用户道具是否足够 user_pack_obj = UserPack.get_instance(rk_user.uid) if not user_pack_obj.is_props_enough(props_id, num): return 11, {'msg': utils.get_msg('pack', 'not_enough_props')} #计算经验点数 add_exp_point = int(num * props_id_config.get('exp', 0)) #所有条件都满足的话 删除道具 添加经验点 user_pack_obj.minus_props(props_id, num, where='add_exp_point') user_property_obj = UserProperty.get(rk_user.uid) user_property_obj.add_card_exp_point(add_exp_point, "by_props") #结果返回 return 0, {'add_exp_point': add_exp_point}
def card_stove(): """ 炼化 """ game_config.subareas_conf() game_config.set_subarea('1') #sell_ucids = params['sell_ucids'] user_property_obj = UserProperty.get_instance(uid) sell_ucids = '201410161423224907513' if not sell_ucids: return 11,{'msg':utils.get_msg('card','no_cost_card')} sell_ucids = sell_ucids.split(',') sell_ucids = utils.remove_null(sell_ucids) user_card_obj = UserCards.get(uid) #检查武将是否存在 for ucid in sell_ucids: if ucid and not user_card_obj.has_card(ucid): return 11,{'msg':utils.get_msg('card','no_card')} #如果有主角卡,则不能消耗 if user_property_obj.leader_role_card in sell_ucids: return 11,{'msg':utils.get_msg('card','role_card')} #带装备武将不允许卖出 if user_card_obj.is_equip_used(sell_ucids): return 11,{'msg':utils.get_msg('equip','is_used')} #被锁定武将不能卖出 if user_card_obj.is_locked(sell_ucids): return 11,{'msg':utils.get_msg('card','locked')} #检查武将是否在deck中 rc,msg = check_card_in_deck(user_card_obj,sell_ucids) if rc: return rc,{'msg':msg} sell_cards = [user_card_obj.cards[ucid] for ucid in sell_ucids] return 0,{'cards_info':sell_cards,'cards_ucids':sell_ucids}
def get_giftcode_lv_up_award(self,gift_id=''): """ 检查是否有可领取的升级奖励 """ if not gift_id: gift_ids = self.gift_code_info.get('lv_up',{}).keys() else: gift_ids = [gift_id] if not gift_ids: return gift_config = self.game_config.gift_config.get('gift_config',{}) user_prop_obj = UserProperty.get(self.uid) pt_fg = False for _id in gift_ids: if _id not in gift_config or _id not in self.gift_code_info.get('lv_up',{}): continue lv_up_gift = gift_config[_id].get('lv_up_gift',{}) for need_lv in lv_up_gift: if int(need_lv)<=user_prop_obj.lv and need_lv not in self.gift_code_info['lv_up'][_id]: self.gift_code_info['lv_up'][_id].append(need_lv) pt_fg = True msg = utils.get_msg('gift', 'lv_up_gift_award', self) self.add_gift(lv_up_gift[need_lv], content=msg % need_lv) if pt_fg: self.put()
def get_bind_phone_gift(self): """ 领取绑定奖励, 每个礼拜只能领一次 miaoyichao """ #获取是否开启手机绑定功能 bind_phone_is_open = self.game_config.system_config.get('bind_phone_is_open') if not bind_phone_is_open: return #获取绑定手机的奖励配置信息 bind_phone_award_conf = copy.deepcopy(self.game_config.loginbonus_config.get("bind_phone_award")) if not bind_phone_award_conf: return #检查是否绑定手机 user_property_obj = UserProperty.get(self.uid) has_bind = user_property_obj.property_info['bind_phone_number_info']['has_bind'] if not has_bind: return #获取当前的星期 now_week = datetime.date.today().isocalendar()[:2] last_got_award_week = user_property_obj.property_info['bind_phone_number_info'].get('last_got_award_week') # 最后一次领取的星期 与现在相同 不发 if last_got_award_week and now_week <= last_got_award_week: return #获取提示语信息 msg = utils.get_msg('bind', 'get_bind_award_msg', self) #添加奖励 self.add_gift(bind_phone_award_conf, msg) #更新绑定信息 user_property_obj.property_info['bind_phone_number_info']['last_got_award_week'] = now_week user_property_obj.put() self.put()
def get_banquet_stamina(): """ 开始宴席 params: click_num: 玩家点击次数,据此来算玩家回体数 """ open_time_gaps = game_config.operat_config.get('open_stamina_banquet_gaps', []) now = datetime.datetime.now() now_date_day = now.strftime('%Y-%m-%d') now_hour_min = now.strftime('%H:%M') this_time_gap = utils.between_gap(now_hour_min, open_time_gaps) if not this_time_gap: return 11,{'msg':utils.get_msg('active', 'not_in_time')} #获取时间区间的最小值 time_start = '%s %s:00'%(now_date_day,str(this_time_gap[0])) start_time = utils.string_toTimestamp(time_start) #查询是否已经领取体力 ul = UserLogin.get_instance(uid) ul.banquet_info[str(start_time)] = False ul.do_put() banquet_info = ul.banquet_info if banquet_info.get(str(start_time), False): return 11, {'msg':utils.get_msg('active', 'already_banquet')} #根据点击次数获取可以领取多少体力 click_num = 30 click_num_awards_conf = game_config.operat_config.get('banquet_click_num_awards', {}) suitable_gap = utils.between_gap(click_num, click_num_awards_conf) get_stamina = click_num_awards_conf.get(suitable_gap, 0) user_property = UserProperty.get_instance(uid) user_property.add_stamina(get_stamina) print get_stamina return {'add_stamina': get_stamina}
def add_exp_point(rk_user,params): ''' 添加经验点接口 根据用户提交的道具 id 给用户添加经验点 ''' props_id = params['props_id'] num = int(params['num']) #根据 id 获取道具的使用途径 props_id_config = game_config.props_config.get(props_id,{}) used_by = props_id_config.get('used_by','') #判断使用的用途 if used_by != 'card': return 11,{'msg':utils.get_msg('pack', 'wrong_used')} #判断用户道具是否足够 user_pack_obj = UserPack.get_instance(rk_user.uid) if not user_pack_obj.is_props_enough(props_id,num): return 11,{'msg':utils.get_msg('pack', 'not_enough_props')} #计算经验点数 add_exp_point = int(num*props_id_config.get('exp',0)) #所有条件都满足的话 删除道具 添加经验点 user_pack_obj.minus_props(props_id,num,where='add_exp_point') user_property_obj = UserProperty.get(rk_user.uid) user_property_obj.add_card_exp_point(add_exp_point, "by_props") #结果返回 return 0,{'add_exp_point':add_exp_point}
def search_friend(rk_user,params): """查找好友 """ fid = params['fid'] try: fid = str(fid) except: return 11,{'msg':utils.get_msg('friend','invalid_fid')} friend_user = UserBase.get(fid) if not friend_user: return 11,{'msg':utils.get_msg('user','no_user')} friend_friend_obj = Friend.getEx(fid) friend_property = UserProperty.get(fid) leader_card = friend_property.leader_card user_pvp_obj = UserPvp.getEx(fid) if user_pvp_obj: pvp_title = user_pvp_obj.pvp_title else: pvp_title = '' data = { 'friend_info':{ 'fid':fid, 'name':friend_user.username, 'country':friend_property.country, 'leader_card':leader_card, 'lv':friend_property.lv, 'max_friend_num':friend_property.max_friend_num, 'now_friend_num':friend_friend_obj.friend_num, 'signature':friend_user.signature, 'pvp_title':pvp_title, } } return 0,data
def get_giftcode_lv_up_award(self, gift_id=''): """ 检查是否有可领取的升级奖励 """ if not gift_id: gift_ids = self.gift_code_info.get('lv_up', {}).keys() else: gift_ids = [gift_id] if not gift_ids: return gift_config = self.game_config.gift_config.get('gift_config', {}) user_prop_obj = UserProperty.get(self.uid) pt_fg = False for _id in gift_ids: if _id not in gift_config or _id not in self.gift_code_info.get( 'lv_up', {}): continue lv_up_gift = gift_config[_id].get('lv_up_gift', {}) for need_lv in lv_up_gift: if int( need_lv ) <= user_prop_obj.lv and need_lv not in self.gift_code_info[ 'lv_up'][_id]: self.gift_code_info['lv_up'][_id].append(need_lv) pt_fg = True msg = utils.get_msg('gift', 'lv_up_gift_award', self) self.add_gift(lv_up_gift[need_lv], content=msg % need_lv) if pt_fg: self.put()
def search_friend(rk_user, params): """查找好友 """ fid = params["fid"] try: fid = str(fid) except: return 11, {"msg": utils.get_msg("friend", "invalid_fid")} friend_user = UserBase.get(fid) if not friend_user: return 11, {"msg": utils.get_msg("user", "no_user")} friend_friend_obj = Friend.getEx(fid) friend_property = UserProperty.get(fid) leader_card = friend_property.leader_card user_pvp_obj = UserPvp.getEx(fid) if user_pvp_obj: pvp_title = user_pvp_obj.pvp_title else: pvp_title = "" data = { "friend_info": { "fid": fid, "name": friend_user.username, "country": friend_property.country, "leader_card": leader_card, "lv": friend_property.lv, "max_friend_num": friend_property.max_friend_num, "now_friend_num": friend_friend_obj.friend_num, "signature": friend_user.signature, "pvp_title": pvp_title, } } return 0, data
def get_lv_gift(self): """ 领取等级奖励 """ lv_up_award_conf = copy.deepcopy( self.game_config.operat_config.get("lv_up_award")) if not lv_up_award_conf: return main_msg = utils.get_msg('operat', 'lv_up_award', self) all_awards_lv = sorted(map(int, lv_up_award_conf.keys())) user_property_obj = UserProperty.get(self.uid) user_level = user_property_obj.lv # 比现在lv小的等级奖励都应该获得 sould_send_awards_lv = all_awards_lv[:bisect. bisect(all_awards_lv, user_level)] for awards_lv in sould_send_awards_lv: awards_lv = str(awards_lv) if awards_lv in self.has_got_lv_gift: continue self.add_gift(lv_up_award_conf[awards_lv], main_msg.format(awards_lv)) self.has_got_lv_gift.append(awards_lv) self.put()
def get_friend_list(rk_user, params): """获取好友列表 """ data = {"friends": []} user_friend_obj = Friend.get(rk_user.uid) for fid in user_friend_obj.get_friend_ids(): friend_user = UserBase.get(fid) friend_property = UserProperty.get(fid) leader_card = friend_property.leader_card user_pvp_obj = UserPvp.getEx(fid) if user_pvp_obj: pvp_title = user_pvp_obj.pvp_title else: pvp_title = "" temp = { "fid": fid, "name": friend_user.username, "country": friend_property.country, "leader_card": leader_card, "lv": friend_property.lv, "login_time": friend_property.login_time, "want_gift": Friend.getEx(fid).friend_gift.get("want_gift", ["", "", ""]), "signature": friend_user.signature, "lock": user_friend_obj.is_lock(fid), "pvp_title": pvp_title, } data["friends"].append(temp) data["now_num"] = len(data["friends"]) data["max_num"] = rk_user.user_property.max_friend_num return 0, data
def show_property_fields(): user_property_obj = UserProperty.get_instance(uid) print 'user_property_obj.property_info','-'*50 pprint(user_property_obj.property_info) #user_property_obj.property_info['wipe_out_times'] = 0 #user_property_obj.do_put() '''
def pk_top(request): ''' PK, 即实时 PvP (Real Time Peer-vs-Peer) ''' data = [] # data.append(tmp) top_model = pvp_redis.get_pvp_redis('1', top_name='real_pvp') top_30_uid_score = top_model.get(30, desc=False) top_30_uid_score.reverse() for uid, score in top_30_uid_score: pk_obj = UserRealPvp.get(uid) ub_obj = UserBase.get(uid) if pk_obj and ub_obj: user_prop_obj = UserProperty.get(uid) tmp = {} #base_info = pvp_obj.pvp_info['base_info'] tmp['uid'] = uid tmp['pt'] = int(score) tmp['pvp_title'] = pk_obj.pvp_title tmp['username'] = ub_obj.username tmp['lv'] = user_prop_obj.lv data.append(tmp) return "admin/pk_top.html", {'data': data}
def pk_top(request): ''' PK, 即实时 PvP (Real Time Peer-vs-Peer) ''' data = [] # data.append(tmp) top_model = pvp_redis.get_pvp_redis('1', top_name='real_pvp') top_30_uid_score = top_model.get(30, desc=False) top_30_uid_score.reverse() for uid, score in top_30_uid_score: pk_obj = UserRealPvp.get(uid) ub_obj = UserBase.get(uid) if pk_obj and ub_obj: user_prop_obj = UserProperty.get(uid) tmp = {} #base_info = pvp_obj.pvp_info['base_info'] tmp['uid'] = uid tmp['pt'] = int(score) tmp['pvp_title'] = pk_obj.pvp_title tmp['username'] = ub_obj.username tmp['lv'] = user_prop_obj.lv data.append(tmp) return "admin/pk_top.html", {'data':data}
def modify_vip_lv(lv): '''vip等级是通过玩家充值元宝的总数来判断的,没vip等级这个字段,所以是间接改''' vip_conf = game_config.user_vip_config[str(lv)] coin = vip_conf['coin'] up = UserProperty.get_instance(uid) #up.add_charge_sumcoin(coin) up.property_info["charge_sumcoin"] = coin up.do_put()
def get_gift(self,gift_id): tmp = {} if gift_id in self.gift_list and not self.gift_list[gift_id].get('has_got',0): up_obj = UserProperty.get(self.uid) tmp = up_obj.give_award(self.gift_list[gift_id]['award'],where='gift') self.gift_list[gift_id]['has_got'] = 1 self.gift_list[gift_id]['got_time'] = int(time.time()) self.put() return tmp
def get_box_gift(rk_user,params): ''' * 领取宝箱奖励 ''' data = {} get_step = params.get('step','0') floor_id = params.get('floor_id') box_type = params.get('box_type') dungeon_config = game_config.dungeon_world_config.get('box_info',{}) floor_conf = dungeon_config.get(floor_id,{}) if not box_type in floor_conf: return 11,{'msg':utils.get_msg('dungeon', 'no_box_config')} box_info = floor_conf[box_type] if get_step == '0': #处理前端要显示的宝箱的内容 data['box_info'] = utils.format_award(box_info) data['box_star'] = int(floor_conf[box_type+'_star']) return 0,data elif get_step == '1': #处理前端要领取的宝箱信息 user_dungeon_obj = UserDungeon.get(rk_user.uid) has_played_info_copy = copy.deepcopy(user_dungeon_obj.has_played_info) if floor_id in has_played_info_copy.get('normal',{}): floor_info = has_played_info_copy['normal'][floor_id] #查看领取条件是否合适 floor_get_star = floor_info['cur_star'] if floor_get_star < int(floor_conf[box_type+'_star']): return 11,{'msg':utils.get_msg('dungeon', 'box_can_not_open')} if floor_info[box_type]: #宝箱已领取情况 return 11,{'msg':utils.get_msg('dungeon', 'has_got_box_award')} else: #领取宝箱逻辑 格式化内容 award = utils.format_award(box_info) user_property_obj = UserProperty.get(rk_user.uid) #将宝箱里面的内容添加到用户信息里面 award_info = user_property_obj.test_give_award(award,where='get_'+box_type) #格式化要返回的内容 data['award_info'] = award_info data['floor_info'] = {} data['floor_info']['floor_id'] = floor_id data['floor_info']['box_type'] = box_type data['floor_info']['box_flag'] = True #重置标志位 user_dungeon_obj.has_played_info['normal'][floor_id][box_type] = True user_dungeon_obj.put() #判断新手引导 newbie_step = int(params.get('newbie_step', 0)) if newbie_step: rk_user.user_property.set_newbie_steps(newbie_step, "get_box_gift") #结果返回 return 0,data else: return 11,{'msg':utils.get_msg('dungeon', 'invalid_dungeon_info')} else: #未识别的内容 return 11,{'msg':utils.get_msg('dungeon', 'invalid_dungeon_info')}
def get_gift(self, gift_id): tmp = {} if gift_id in self.gift_list and not self.gift_list[gift_id].get( 'has_got', 0): up_obj = UserProperty.get(self.uid) tmp = up_obj.give_award(self.gift_list[gift_id]['award'], where='gift') self.gift_list[gift_id]['has_got'] = 1 self.gift_list[gift_id]['got_time'] = int(time.time()) self.put() return tmp
def get_store_info(): """ 得到当前玩家的神秘商店信息 前段点击 和 前段倒计时结束时调用此接口 神秘商店时调用此接口 此接口会先判断是否要自动刷新商品 """ user_property_obj = UserProperty.get_instance(uid) print user_property_obj.get_fight_soul user_mystery_store_obj = UserMysteryStore.get_instance(uid) #return 0, _pack_store_info(user_mystery_store_obj.auto_refresh_store()) k = _pack_store_info(user_mystery_store_obj.auto_refresh_store()) print 'data=',json.dumps(k,indent=1)
def get_consume_award(self, coin): try: #获取运营配置的消耗奖励 consume_award_conf = copy.deepcopy( self.game_config.operat_config.get("consume_award")) if not consume_award_conf: return #获取消耗奖励的内容 user_property_obj = UserProperty.get(self.uid) consume_award_info = user_property_obj.consume_award_info old_consume_award_info = copy.deepcopy(consume_award_info) #遍历查找奖励内容 for gift_id in consume_award_conf: gift_conf = consume_award_conf[gift_id] start_time = gift_conf.get('start_time') end_time = gift_conf.get('end_time', '2111-11-11 11:11:11') now_str = datetime_toString(datetime.datetime.now()) #未开放或已过期的礼包 if now_str > end_time or now_str < start_time: continue if gift_id not in consume_award_info: consume_award_info[gift_id] = { 'consume_coin': coin, 'has_got_cnt': 0, # 已领取的次数 } else: consume_award_info[gift_id]['consume_coin'] += coin #金额未达到 if consume_award_info[gift_id]['consume_coin'] - gift_conf.get( 'consume_coin', 0) < 0: continue #满足条件,发奖励 #已经领取过的礼包 print('chenhaiou gift_id: ', gift_id) # 如果有一次消耗元宝超过两倍 gift_conf['consume_coin'] for cnt in range(consume_award_info[gift_id]['consume_coin'] / gift_conf.get('consume_coin', 0)): consume_award_info[gift_id]['has_got_cnt'] += 1 if gift_conf.get('award', []): msg = gift_conf.get('name', '') + utils.get_msg( 'operat', 'consume_award', self).format( gift_conf.get('consume_coin', 0)) for award_warp in gift_conf['award'].values(): award = utils.get_item_by_random_simple(award_warp) self.add_gift_by_dict(award, msg) consume_award_info[gift_id]['consume_coin'] %= gift_conf.get( 'consume_coin', 0) if old_consume_award_info != consume_award_info: user_property_obj.put() except: print traceback.format_exc()
def get_request_list(rk_user,params): """获取申请列表以及自己申请的 """ data = {'self_requests':[],'friend_requests':[]} user_friend_obj = Friend.get(rk_user.uid) for fid in user_friend_obj.self_requests: request_friend_user = UserBase.get(fid) if not request_friend_user: continue request_friend_property = UserProperty.get(fid) leader_card = request_friend_property.leader_card temp = { 'fid':fid, 'name':request_friend_user.username, 'country':request_friend_property.country, 'leader_card':leader_card, 'lv':request_friend_property.lv, 'request_time':user_friend_obj.self_requests[fid], } data['self_requests'].append(temp) fids = user_friend_obj.get_request_ids() for fid in fids: friend_user = UserBase.get(fid) if not friend_user: continue friend_property = UserProperty.get(fid) leader_card = friend_property.leader_card temp = { 'fid':fid, 'name':friend_user.username, 'country':friend_property.country, 'leader_card':leader_card, 'lv':friend_property.lv, 'request_time':user_friend_obj.requests[fid], } data['friend_requests'].append(temp) return 0,data
def get_request_list(rk_user, params): """获取申请列表以及自己申请的 """ data = {"self_requests": [], "friend_requests": []} user_friend_obj = Friend.get(rk_user.uid) for fid in user_friend_obj.self_requests: request_friend_user = UserBase.get(fid) if not request_friend_user: continue request_friend_property = UserProperty.get(fid) leader_card = request_friend_property.leader_card temp = { "fid": fid, "name": request_friend_user.username, "country": request_friend_property.country, "leader_card": leader_card, "lv": request_friend_property.lv, "request_time": user_friend_obj.self_requests[fid], } data["self_requests"].append(temp) fids = user_friend_obj.get_request_ids() for fid in fids: friend_user = UserBase.get(fid) if not friend_user: continue friend_property = UserProperty.get(fid) leader_card = friend_property.leader_card temp = { "fid": fid, "name": friend_user.username, "country": friend_property.country, "leader_card": leader_card, "lv": friend_property.lv, "request_time": user_friend_obj.requests[fid], } data["friend_requests"].append(temp) return 0, data
def ttest_give_award(): user_property = UserProperty.get_instance(uid) uc = UserCards.get_instance(uid) ue = UserEquips.get_instance(uid) up = UserPack.get_instance(uid) us = UserSouls.get_instance(uid) #award = {'card':{'1_card':1}} #award = {'equip':{'13001_equip': 2}} #award = {'props':{'1_props':2}} #award = {'soul':{'card':{'1_card':1}}} award = {'soul':{'equip':{'13001_equip':1}}} print user_property.test_give_award(award) uc.do_put() ue.do_put() up.do_put() us.do_put()
def get_consume_award(self, coin): try: #获取运营配置的消耗奖励 consume_award_conf = copy.deepcopy(self.game_config.operat_config.get("consume_award")) if not consume_award_conf: return #获取消耗奖励的内容 user_property_obj = UserProperty.get(self.uid) consume_award_info = user_property_obj.consume_award_info old_consume_award_info = copy.deepcopy(consume_award_info) #遍历查找奖励内容 for gift_id in consume_award_conf: gift_conf = consume_award_conf[gift_id] start_time = gift_conf.get('start_time') end_time = gift_conf.get('end_time','2111-11-11 11:11:11') now_str = datetime_toString(datetime.datetime.now()) #未开放或已过期的礼包 if now_str > end_time or now_str < start_time: continue if gift_id not in consume_award_info: consume_award_info[gift_id] = { 'consume_coin': coin, 'has_got_cnt': 0, # 已领取的次数 } else: consume_award_info[gift_id]['consume_coin'] += coin #金额未达到 if consume_award_info[gift_id]['consume_coin'] - gift_conf.get('consume_coin',0) < 0: continue #满足条件,发奖励 #已经领取过的礼包 print('chenhaiou gift_id: ', gift_id) # 如果有一次消耗元宝超过两倍 gift_conf['consume_coin'] for cnt in range(consume_award_info[gift_id]['consume_coin'] / gift_conf.get('consume_coin',0)): consume_award_info[gift_id]['has_got_cnt'] += 1 if gift_conf.get('award', []): msg = gift_conf.get('name', '') + utils.get_msg('operat', 'consume_award', self).format(gift_conf.get('consume_coin',0)) for award_warp in gift_conf['award'].values(): award = utils.get_item_by_random_simple(award_warp) self.add_gift_by_dict(award, msg) consume_award_info[gift_id]['consume_coin'] %= gift_conf.get('consume_coin',0) if old_consume_award_info != consume_award_info: user_property_obj.put() except: print traceback.format_exc()
def buy_store_goods(): """ 玩家购买指定商品时逻辑 params 参数需包含 store_type: 可选 "packages" "gold_store" or "coin_store" goods_index: int 为所买商品在所属类型的index """ #store_type = params['store_type'] store_type = 'fight_coin_store' goods_index = 1 buy_goods_info = {} goods_list = [] user_mystery_store_obj = UserMysteryStore.get_instance(uid) buy_goods_info = user_mystery_store_obj.store_info()[store_type][goods_index] goods_list.append(buy_goods_info['goods']) fight_or_coin = "coin" if buy_goods_info.get("coin", 0) else "fight_soul" needed_cost = buy_goods_info.get(fight_or_coin, 0) user_property = UserProperty.get_instance(uid) # 根据store_type 决定是 消耗元宝还是战魂 minus_func = getattr(user_property, "minus_" + fight_or_coin) if not minus_func(needed_cost, 'buy_mystery_store_goods'): return 11, {'msg': utils.get_msg('user', 'not_enough_' + fight_or_coin)} # 发商品 # 前端通过rc 是否等于 0 判断是否购买成功 if not user_mystery_store_obj.update_goods_info_by_index(store_type, goods_index): return 11, {'msg': 'has bought this item'} all_get_goods = {} award_return = {'stamina':0,'gold':0,'coin':0,'gacha_pt':0,'fight_soul':0,'stone':0,'item':{}, 'super_soul': 0, 'material':{},'card':{},'equip':{}, 'normal_soul': {},} for goods in goods_list: tmp = user_property.test_give_award(_pack_goods(goods), where=u"buy_from_mystery_store") for _k in tmp: if _k in ['gold','coin','gacha_pt','stone', 'fight_soul','super_soul','stamina']: award_return[_k] = award_return.get(_k,0) + tmp.get(_k,0) elif _k in ['item','material', 'normal_soul']: for __kk in tmp[_k]: award_return[_k][__kk] = award_return[_k].get(__kk,0) + tmp[_k][__kk] elif _k in ['card','equip']: award_return[_k].update(tmp[_k]) all_get_goods = {i: award_return[i] for i in award_return if award_return[i]} return 0, {'get_info': all_get_goods}
def __check_can_add_friend(rk_user,friend): """ 检查是否可以添加好友 """ #好友id不能是自己 if rk_user.uid == friend.uid: return 11,utils.get_msg('friend','cannot_self') user_friend_obj = Friend.get(rk_user.uid) #已经添加过的好友不能再添加 if friend.uid in user_friend_obj.friends: return 11,utils.get_msg('friend','already_friend') #检查自己是否已经达到最大好友数量 if user_friend_obj.friend_num >= rk_user.user_property.max_friend_num: return 11,utils.get_msg('friend','self_max_friend') #检查对方是否已经达到最大好友数量 friend_friend_obj = Friend.getEx(friend.uid) friend_property = UserProperty.get(friend.uid) if friend_friend_obj.friend_num >= friend_property.max_friend_num: return 11,utils.get_msg('friend','other_max_friend') return 0,''
def __check_can_add_friend(rk_user, friend): """ 检查是否可以添加好友 """ # 好友id不能是自己 if rk_user.uid == friend.uid: return 11, utils.get_msg("friend", "cannot_self") user_friend_obj = Friend.get(rk_user.uid) # 已经添加过的好友不能再添加 if friend.uid in user_friend_obj.friends: return 11, utils.get_msg("friend", "already_friend") # 检查自己是否已经达到最大好友数量 if user_friend_obj.friend_num >= rk_user.user_property.max_friend_num: return 11, utils.get_msg("friend", "self_max_friend") # 检查对方是否已经达到最大好友数量 friend_friend_obj = Friend.getEx(friend.uid) friend_property = UserProperty.get(friend.uid) if friend_friend_obj.friend_num >= friend_property.max_friend_num: return 11, utils.get_msg("friend", "other_max_friend") return 0, ""
def get_recover_times(): while True: data = {} all_dungeon = ['normal','daily','special'] #获取vip等级 up = UserProperty.get_instance(uid) vip_lv = up.vip_cur_level vip_conf = game_config.user_vip_conf user_config = vip_conf.get(str(vip_lv),{}) today_str = utils.get_today_str() recover_list = ['recover_stamina','recover_pvp_stamina','recover_mystery_store'] recover_times = up.property_info['recover_times'] if recover_times['today_str'] == today_str: for recover in recover_list: data[recover] = user_config['can_'+recover+'_cnt'] - recover_times[recover] data['recover_copy'] = {} for i in all_dungeon: data['recover_copy'][i] = user_config['can_recover_copy_cnt'][i] - recover_times['recover_copy'][i] else: up.reset_recover_times() data = self.property_info['recover_times'] return data
def get_lv_gift(self): """ 领取等级奖励 """ lv_up_award_conf = copy.deepcopy(self.game_config.operat_config.get("lv_up_award")) if not lv_up_award_conf: return main_msg = utils.get_msg('operat', 'lv_up_award', self) all_awards_lv = sorted(map(int, lv_up_award_conf.keys())) user_property_obj = UserProperty.get(self.uid) user_level = user_property_obj.lv # 比现在lv小的等级奖励都应该获得 sould_send_awards_lv = all_awards_lv[:bisect.bisect(all_awards_lv, user_level)] for awards_lv in sould_send_awards_lv: awards_lv = str(awards_lv) if awards_lv in self.has_got_lv_gift: continue self.add_gift(lv_up_award_conf[awards_lv], main_msg.format(awards_lv)) self.has_got_lv_gift.append(awards_lv) self.put()
def get_bind_phone_gift(self): """ 领取绑定奖励, 每个礼拜只能领一次 miaoyichao """ #获取是否开启手机绑定功能 bind_phone_is_open = self.game_config.system_config.get( 'bind_phone_is_open') if not bind_phone_is_open: return #获取绑定手机的奖励配置信息 bind_phone_award_conf = copy.deepcopy( self.game_config.loginbonus_config.get("bind_phone_award")) if not bind_phone_award_conf: return #检查是否绑定手机 user_property_obj = UserProperty.get(self.uid) has_bind = user_property_obj.property_info['bind_phone_number_info'][ 'has_bind'] if not has_bind: return #获取当前的星期 now_week = datetime.date.today().isocalendar()[:2] last_got_award_week = user_property_obj.property_info[ 'bind_phone_number_info'].get('last_got_award_week') # 最后一次领取的星期 与现在相同 不发 if last_got_award_week and now_week <= last_got_award_week: return #获取提示语信息 msg = utils.get_msg('bind', 'get_bind_award_msg', self) #添加奖励 self.add_gift(bind_phone_award_conf, msg) #更新绑定信息 user_property_obj.property_info['bind_phone_number_info'][ 'last_got_award_week'] = now_week user_property_obj.put() self.put()
def refresh_store_by_self(): """ 玩家主动刷新时 调用此接口 params 参数需包含 store_type : "gold_store" or "coin_store" """ game_config.subareas_conf() game_config.set_subarea('1') store_type_list = ['coin_store','fight_soul_store'] needed_cost = game_config.mystery_store["store_refresh_cost"] user_property_obj = UserProperty.get_instance(uid) # 消耗元宝 minus_func = getattr(user_property_obj, "minus_coin") #根据vip刷新次数 if not vip.check_limit_recover(user_property_obj,'recover_mystery_store'): return 11,{'msg':utils.get_msg('user','max_times')} #回复次数+1 user_property_obj.add_recover_times('recover_mystery_store') # 再判断是否 coin or gold 足够 if not minus_func(needed_cost, 'refresh_mystery_store'): return 11,{'msg': utils.get_msg('user', 'not_enough_coin')} # 记录 消费元宝log #data_log_mod.set_log("ConsumeRecord", rk_user, # lv=rk_user.user_property.lv, # num=needed_cost, # consume_type='refresh_coin_store', # before_coin=rk_user.user_property.coin + needed_cost, # after_coin=rk_user.user_property.coin #) user_mystery_store_obj = UserMysteryStore.get_instance(uid) for store_type in store_type_list: user_mystery_store_obj.refresh_store(store_type) #return 0, _pack_store_info(user_mystery_store_obj.store_info()) k = _pack_store_info(user_mystery_store_obj.store_info()) print 'data=',json.dumps(k,indent=1)
def edit_user(request): """ 编辑用户页 """ uid = request.GET.get('uid','').strip() if not uid: pid = request.GET.get('pid','').strip() if not pid: username = request.GET.get('username','') if not username: return HttpResponseRedirect('/admin/user/?status=1') try: uid=ocapp.mongo_store.mongo.db['username'].find({'name':username})[0]['uid'] except: return HttpResponseRedirect('/admin/user/?status=1') else: account = AccountMapping.get(pid) if not account: return HttpResponseRedirect('/admin/user/?status=1') uid = account.uid user = UserBase.get(uid) if not user or not user.account: return HttpResponseRedirect('/admin/user/?status=1') user_equips_obj = UserEquips.get_instance(uid) user_pack_obj = UserPack.get_instance(uid) user_property_obj = UserProperty.get(uid) user_card_obj = UserCards.get(user.uid) user_real_pvp_obj = user.user_real_pvp game_config.set_subarea(user.subarea) data = { 'deck_cards':[], 'other_cards':[], } if not user.client_type: data['client_type'] = 'appstore_ios' else: data['client_type'] = user.client_type all_cards = [] all_cids = game_config.card_config.keys() all_cids_cp = copy.deepcopy(game_config.card_config) for k,v in all_cids_cp.iteritems(): all_cids_cp[k]['no'] = int(k.split('_')[0]) all_cids.sort(key = lambda x :(all_cids_cp[x]['no'])) for cid in all_cids: all_cards.append(Card.get(cid)) data['all_cards'] = all_cards #用户当前战场信息 user_dungeon_obj = UserDungeon.get_instance(user.uid) #充值信息 data['charge_sum_money'] = user_property_obj.charge_sum_money data['last_charge_record'] = ChargeRecord.find({'uid':uid})[-1] if ChargeRecord.find({'uid':uid}) else {} ######神秘商店 代码往前方 因为此操作会改变玩家武将,物品等信息############## # 刷新 物品列表 if request.POST.get('refresh_mystery_store',''): store_type = request.POST.get('store_type') params = { } mystery_store.refresh_store_by_self(user, params) # 购买 物品 if request.POST.get('buy_mystery_store_goods',''): store_type = request.POST.get('store_type') goods_index = int(request.POST.get('goods_index')) params = { 'store_type': store_type, 'goods_index': goods_index, } mystery_store.buy_store_goods(user, params) ######Pk商店 ## # 刷新 物品列表 if request.POST.get('refresh_pk_store', ''): pk_store.refresh_store_by_self(user, {}) # 购买 物品 if request.POST.get('buy_pk_store_goods',''): goods_index = int(request.POST.get('goods_index')) params = { 'goods_index': goods_index, } pk_store.buy_store_goods(user, params) #################### moderator = auth.get_moderator_by_request(request) qa_edit = 'qa edited by '+str(moderator.username) #提交状态 if request.method == "POST": state = int(request.POST.get("state","0")) state = bool(state) #冻结 if state != user.in_frozen: if state: user.froze() #解冻 else: user.unfroze() #删除账号 if request.POST.get('del_user',''): if not user.account: return HttpResponseRedirect('/admin/user/?status=1') user.account.delete() if request.POST.get('add_gold',''): add_gold = int(request.POST.get('add_gold')) if add_gold>0: user_property_obj.add_gold(add_gold,where=qa_edit) else: user_property_obj.minus_gold(add_gold) #增加元宝 if request.POST.get('add_coin',''): add_coin = int(request.POST.get('add_coin')) if add_coin>0: user_property_obj.add_coin(add_coin, where=qa_edit) else: user_property_obj.minus_coin(add_coin, where=qa_edit) #增加 经验点 if request.POST.get('add_card_point',''): add_card_point = int(request.POST.get('add_card_point')) if add_card_point>0: user_property_obj.add_card_exp_point(add_card_point, qa_edit) else: user_property_obj.minus_card_exp_point(add_card_point, qa_edit) #增加经验 if request.POST.get('add_exp',''): add_exp = int(request.POST.get('add_exp')) user_property_obj.add_exp(add_exp,where=qa_edit) #更改等级 if request.POST.get('modify_lv',''): lv = request.POST.get('modify_lv') lv_exp = game_config.user_level_config[lv]['exp'] now_exp = user_property_obj.property_info['exp'] user_property_obj.add_exp(lv_exp-now_exp,where=qa_edit) # 增加pk 积分 if request.POST.get('add_pk_pt', 0): pvp_pt = int(request.POST.get('add_pk_pt')) user_real_pvp_obj.add_pt(pvp_pt) # 加功勋 if request.POST.get('add_honor',''): honor = int(request.POST.get('add_honor')) urp = UserRealPvp.get(user.uid) urp.add_honor(honor, where=qa_edit) # 加战魂 if request.POST.get('add_fight_soul',''): fight_soul_num = int(request.POST.get('add_fight_soul')) user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit) #发邮件 if request.POST.get('mail_title') or request.POST.get('mail_goods'): from apps.models.user_mail import UserMail from apps.common import utils sid = 'system_%s' % (utils.create_gen_id()) mail_title = request.POST.get('mail_title', '') mail_content = request.POST.get('mail_content', '') goods_str = request.POST.get('mail_goods', '').strip() award = {} for goods_info in goods_str.split(";"): goods_info = goods_info.strip() print "debug guochen email", goods_info if not goods_info: continue goods_id, num = goods_info.strip().split(":") award.setdefault(goods_id, 0) award[goods_id] += int(num) mailtype = 'system_qa' user_mail_obj = UserMail.hget(uid, sid) user_mail_obj.set_mail(mailtype=mailtype, title=mail_title, content=mail_content, award=award) # 修改vip等级 if request.POST.get('modify_vip_lv'): vip_lv = request.POST.get('modify_vip_lv') vip_conf = game_config.user_vip_config.get(str(vip_lv)) if vip_conf: coin = vip_conf['coin'] user_property_obj.property_info["charge_coins"] = coin user_property_obj.put() #补武将 if request.POST.get("add_card_ex", ""): user_card_obj = UserCards.get(user.uid) strCardInfo = request.POST.get("add_card_ex") lstCardInfo = strCardInfo.strip().split(";") for strAddCard in lstCardInfo: cid = strAddCard.split(":")[0] cid = cid.strip() + '_card' num = int(strAddCard.split(":")[1]) for i in range(num): clv = 1 user_card_obj.add_card(cid,clv,where=qa_edit) #增加武将 if request.POST.getlist('add_card'): add_cids = request.POST.getlist('add_card') user_card_obj = UserCards.get(user.uid) for add_cid in add_cids: if add_cid in game_config.card_config: clv = 1 user_card_obj.add_card(add_cid,clv,where=qa_edit) #增加武将经验 if request.POST.get('add_card_exp',''): add_exp = int(request.POST.get('add_card_exp')) ucid = request.POST.get('ucid') user_card_obj.add_card_exp(ucid,add_exp) #增加武将技能级别 if request.POST.get('add_card_sk_lv',''): ucid = request.POST.get('ucid') user_card_obj.add_card_sk_lv(ucid) #卖掉卡片 if request.POST.get('sell_card',''): ucid = request.POST.get('ucid') #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv']) user_card_obj.del_card_info([ucid]) #user.user_property.add_gold(this_card.sell_gold,where=qa_edit) #踢出队伍 if request.POST.get('kick_deck',''): kick_index = int(request.POST.get('deck_index')) if user_card_obj.deck[kick_index].get('ucid','') != user_card_obj.get_leader(user_card_obj.cur_deck_index): user_card_obj.deck[kick_index] = {} user_card_obj.put() #设置主将 if request.POST.get('set_deck_main',''): ucid = request.POST.get('ucid') find_fg = False for card in user_card_obj.deck: if card.get('leader',0): card['ucid'] = ucid user_card_obj.put() find_fg = True break if not find_fg: user_card_obj.deck[0] = {'ucid':ucid,'leader':1} user_card_obj.put() #设置副将 if request.POST.get('set_deck_sub',''): ucid = request.POST.get('ucid') for card in user_card_obj.deck: if not card: card['ucid'] = ucid user_card_obj.put() break #一键送所有武将碎片 if request.POST.get('give_all_card_soul',''): for cid in game_config.card_config: user_card_obj.add_card(cid,1,where=qa_edit) user_card_obj.put() #一键送所有武将 if request.POST.get('give_all_card',''): #一键送所有武将 for cid in all_cids: ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2] # if request.POST.get('give_all_card',''): # user_card_obj.cards = {} # user_card_obj.cards_info = { # "decks":[[{}] * 5] * 10, # "cur_deck_index":0, # } # for eid in user_equips_obj.equips: # if user_equips_obj.equips[eid].get("used_by"): # user_equips_obj.equips[eid]['used_by'] = '' # user_equips_obj.put() # card_index = 0 # for cid in all_cids: # clv = 1 # ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2] # if card_index < 5: # user_card_obj.deck[card_index]['ucid'] = ucid # card_index += 1 #一键删除军队外的所有武将 if request.POST.get('del_other_card',''): decks = [] for deck in user_card_obj.decks: decks.extend([card['ucid'] for card in deck if card.get('ucid','')]) del_cids = filter(lambda x:x not in decks,user_card_obj.cards.keys()) user_card_obj.del_card_info(del_cids) for eid in user_equips_obj.equips: if user_equips_obj.equips[eid].get("used_by"): user_equips_obj.equips[eid]['used_by'] = '' user_equips_obj.put() #开放战场 if request.POST.get('open_dungeon',''): open_dungeon = request.POST.get('open_dungeon') floor_id = open_dungeon.split('-')[0] room_id = open_dungeon.split('-')[1] user_dungeon_obj.dungeon_info['normal_current']['floor_id'] = floor_id user_dungeon_obj.dungeon_info['normal_current']['room_id'] = room_id user_dungeon_obj.dungeon_info['normal_current']['status'] = 0 user_dungeon_obj.put() #回复体力 if request.POST.get('add_stamina', ''): add_stamina = int(request.POST.get('add_stamina')) user_property_obj.add_stamina(add_stamina) #equip if request.POST.get("add_equips", ""): user_equips_obj = UserEquips.get(uid) strEquipsInfo = request.POST.get("add_equips") lstEquipsInfo = strEquipsInfo.strip().split(";") for strAddEquip in lstEquipsInfo: eid = strAddEquip.split(":")[0] eid = eid.strip() + '_equip' num = int(strAddEquip.split(":")[1]) for i in range(num): user_equips_obj.add_equip(eid,where=qa_edit) #材料 if request.POST.get("add_mats", ""): strItemsInfo = request.POST.get("add_mats") lstItemsInfo = strItemsInfo.strip().split(";") for strAddItem in lstItemsInfo: mid = strAddItem.split(":")[0] mid = mid.strip() + '_mat' num = int(strAddItem.split(":")[1]) user_pack_obj.add_material(mid,num,where=qa_edit) #道具 if request.POST.get("add_props", ""): strPropsInfo = request.POST.get("add_props") lstPropsInfo = strPropsInfo.strip().split(";") for strAddProps in lstPropsInfo: pid = strAddProps.split(":")[0] pid = pid.strip() + '_props' num = int(strAddProps.split(":")[1]) user_pack_obj.add_props(pid,num,where=qa_edit) if request.POST.get("add_materials_num", 0): mid = request.POST.get("mid") user_pack_obj.add_material(mid,int(request.POST.get("add_materials_num", 0)),where=qa_edit) if request.POST.get("add_props_num", 0): pid = request.POST["prop"] user_pack_obj.add_props(pid, int(request.POST.get("add_props_num", 0)),where=qa_edit) if request.POST.get('give_all_props'): num = int(request.POST.get('all_props_num'))if request.POST.get('all_props_num') else 99 for iid in game_config.props_config: user_pack_obj.add_props(iid,num,where=qa_edit) if request.POST.get('del_all_props'): user_pack_obj.props = {} user_pack_obj.put() if request.POST.get('give_all_equips'): user_equips = UserEquips.get(uid) for eid in game_config.equip_config: user_equips.add_equip(eid,where=qa_edit) #一键送所有的装备碎片 if request.POST.get('give_all_equip_soul'): user_souls_obj = UserSouls.get(uid) for eid in game_config.equip_config: if game_config.equip_config[eid].get('need_soul_types_num',0): parts = game_config.equip_config[eid].get('need_soul_types_num',0) for i in xrange(1,parts+1): user_souls_obj.add_equip_soul(eid+'_'+str(i),100,where=qa_edit) else: user_souls_obj.add_equip_soul(eid,1,where=qa_edit) #一键删除所有的装备碎片 if request.POST.get('del_all_equip_soul'): user_souls_obj = UserSouls.get(uid) user_souls_obj.equip_souls_info = {} user_souls_obj.put() #添加单个装备碎片 if request.POST.get('add_single_equip_soul'): sid = request.POST.get('sid') num = int(request.POST.get('add_single_equip_soul')) user_souls_obj = UserSouls.get_instance(uid) user_souls_obj.add_equip_soul(sid, num,where=qa_edit) user_souls_obj.put() if request.POST.get('del_other_equips'): user_equips = UserEquips.get(uid) ueids = [ ueid for ueid in user_equips.equips if not user_equips.is_used(ueid)] user_equips.delete_equip(ueids) if request.POST.get('give_all_materials'): num = int(request.POST.get('all_materials_num'))if request.POST.get('all_materials_num') else 99 user_pack_obj = UserPack.get_instance(uid) for mid in game_config.material_config: user_pack_obj.add_material(mid,num,where=qa_edit) if request.POST.get('del_all_materials'): user_pack_obj = UserPack.get_instance(uid) user_pack_obj.materials = {} user_pack_obj.put() #一键过新手引导 if request.POST.get('newbie_pass','') and user.user_property.newbie: newbie_steps_num = int(user.game_config.system_config.get('newbie_steps', 6)) user.user_property.property_info['newbie_steps'] = (1 << newbie_steps_num) - 1 user.user_property.set_newbie() user.user_property.do_put() data['status'] = 1 data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current'] #配置中的所有战场 data['all_dungeon'] = [] floor_ids = sorted(map(lambda x:int(x),game_config.normal_dungeon_config.keys())) for floor_id in floor_ids: for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]['rooms'].keys()): data['all_dungeon'].append('%d-%s' % (floor_id,room_id)) #用户已经达到最深层时 if '%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']) == data['all_dungeon'][-1]: data['max_dungeon'] = True else: data['max_dungeon'] = False now_index = data['all_dungeon'].index('%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id'])) data['all_dungeon'] = data['all_dungeon'][now_index + 1:] #装备 equips = user_equips_obj.equips eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips ] data['user_equips'] = [game_config.equip_config.get(eid_dict['eid']) for eid_dict in eqids_dict] all_equips_tag = sorted([int(i.split('_')[0]) for i in game_config.equip_config.keys()]) data['all_equips'] = [(i,game_config.equip_config.get(str(i)+'_equip')) for i in all_equips_tag] #mat data['user_materials'] = {mid :{'name':game_config.material_config.get(mid, {}).get('name', ''),'num':user_pack_obj.materials[mid]} for mid in user_pack_obj.materials } all_materials_tag = sorted([int(i.split('_')[0]) for i in game_config.material_config.keys()]) data['all_materials'] = [(i,game_config.material_config.get(str(i)+'_mat')) for i in all_materials_tag] #props data['user_props'] = {pid :{'name':game_config.props_config.get(pid, {}).get('name'),'num':user_pack_obj.props[pid]} for pid in user_pack_obj.props } all_props_tag = sorted([int(i.split('_')[0]) for i in game_config.props_config.keys()]) data['all_props'] = [(i,game_config.props_config.get(str(i)+'_props')) for i in all_props_tag] ######将魂系统 代码要在其他逻辑偏后 以保证是最新的信息############## user_souls_obj = UserSouls.get_instance(uid) # 添加 普通将魂 if request.POST.get('add_normal_soul',''): add_normal_soul_num = int(request.POST.get('add_normal_soul')) sid = request.POST.get('sid') user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit) # 批量添加 普通将魂 if request.POST.get('dump_normal_soul'): dump_normal_soul_str = request.POST.get('dump_normal_soul').strip() for item in dump_normal_soul_str.split(';'): sid, num = item.split(':') user_souls_obj.add_normal_soul(sid + '_card', int(num), where=qa_edit) # 批量添加 装备碎片 if request.POST.get('add_equip_soul'): add_equip_soul_str = request.POST.get('add_equip_soul').strip() for equip_info in add_equip_soul_str.split(';'): eid, num = equip_info.split(':') user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit) # 添加 英雄将魂 if request.POST.get('add_super_soul',''): add_super_soul_num = int(request.POST.get('add_super_soul')) if add_super_soul_num >= 0: user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit) else: user_souls_obj.minus_card_soul('super_soul', -add_super_soul_num, where=qa_edit) # 武将碎片兑换武将 if request.POST.get('soul_exchange_card'): sid = request.POST.get('sid') params = {'cid':sid} user['uid'] = uid soul.exchange_card(user, params) # 删除将魂 if request.POST.get('delete_card_soul'): sid = request.POST.get('sid') num = int(request.POST.get('num')) user_souls_obj = UserSouls.get_instance(uid) user_souls_obj.minus_card_soul(sid, num,where=qa_edit) user_souls_obj.put() data.update(copy.deepcopy(soul.get_all(user, None)[1])) #武将碎片的显示 for sid, soul_conf in data['normal_souls'].items(): soul_conf['name'] = game_config.card_config[sid].get('star','') + u'星 ' + game_config.card_config[sid].get('name','') + u' 碎片' #装备碎片的显示 for sid, soul_conf in data['equip_souls_info'].items(): all_parts = sid.split('_') if len(all_parts) == 2: soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片' else: sid = '%s_%s'%(all_parts[0],all_parts[1]) soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片第%s部分'%all_parts[2] # 获取玩家武将信息 代码往后放 以保证是最新的信息 deck_num = 0 for card in user_card_obj.deck: if card: ucid = card['ucid'] card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.is_leader = card.get('leader',0) eid = ''#user_card_obj.get_eid(ucid) if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' this_card.now_exp = card_info['exp'] data['deck_cards'].append(this_card) deck_num += 1 else: data['deck_cards'].append(None) data['deck_num'] = deck_num other_ucids = user_card_obj.cards.keys() for card in user_card_obj.deck: ucid = card.get('ucid') if ucid and ucid in other_ucids: other_ucids.remove(ucid) for ucid in other_ucids: card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.now_exp = card_info['exp'] eid = ''#user_card_obj.get_eid(ucid) if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' data['other_cards'].append(this_card) #重新整理 下编队 user_card_obj.decks # 邮件 show_mails = mails.show_mails(user, {})['show_mails'] temp_mails = show_mails.values() # 整理awards内容,就显示good_id和num for mail in temp_mails: for award in mail['awards'][:]: if not 'good_id' in award.values()[0]: continue mail['awards'].append({award.values()[0]['good_id']: award.values()[0].get('num', 0)}) mail['awards'].pop(0) data.update({ 'mails': sorted(temp_mails, key=operator.itemgetter('can_get', 'create_time'), reverse=True), 'user_property_obj':user_property_obj, 'user':user, 'add_time':timestamp_toString(user.add_time), 'last_login_time':timestamp_toString(user.user_property.login_time), 'login_record':UserLogin.get(uid).login_info['login_record'], 'user_real_pvp_obj': user_real_pvp_obj.pvp_detail, 'mystery_store': mystery_store.get_store_info(user, {}), 'pk_store': pk_store.get_store_info(user, {}), }) return 'user/edit.html', data
def property_real_pvp(): user_property_obj = UserProperty.get_instance(uid) user_real_pvp = user_property_obj.user_base.user_real_pvp print user_real_pvp
def stove(rk_user,params): """ 熔炼炉 类似一个回收系统,消耗武将,装备等,来得到相应的资源,资源包括战魂,铜钱,素材,道具等。 返还的范围包括物品的初始花费和后续花费,比如升级某样物品所花费的铜钱也返还 """ #练化类型 category = params.get('category','') data = {} rc = 0 user_property_obj = UserProperty.get_instance(rk_user.uid) user_card_obj = UserCards.get_instance(rk_user.uid) user_equip_obj = UserEquips.get_instance(rk_user.uid) user_pack_obj = UserPack.get_instance(rk_user.uid) user_property_obj = UserProperty.get_instance(rk_user.uid) #出售逻辑很炼丹炉一样,所以直接调用出售逻辑获得数据结构 #武将 if category == 'card': rc,msg = card.card_stove(rk_user,params) if rc: return rc,msg #获取武将计算系数 card_update_config:武将强化 card_stove_gold_coe = float(game_config.card_update_config['card_stove_gold_coe']) card_stove_props_coe = float(game_config.card_update_config['card_stove_props_coe']) #取得天赋进阶的配置信息 talent_skill_config 武将天赋技能 advanced_talent_config = game_config.talent_skill_config['advanced_talent_config'] #总计获取的战魂 fight_soul = 0 #总计返回的进阶丹 return_props = 0 #返回铜钱 return_gold = 0 for card_info in msg['cards_info']: cid = card_info['cid'] # print '#### cid=', cid #获取武将的当前天赋等级 cur_talent_lv = card_info['talent_lv'] # print '#### cur_talent_lv=', cur_talent_lv #获取武将星级 card_config 武将设置 star = str(game_config.card_config[cid].get('star',4)) # print '#### card star=', star #读取计算战魂系统 card_update_config:武将强化 stove_card_fight_soul = int(game_config.card_update_config['card_stove_fight_soul'].get(star,1)) #获取当前经验 cost_update_gold = card_info['exp'] #武将炼化基础值 base_gold = int(game_config.card_update_config['sell_base_gold'].get(star,3000)) #获取当前进阶所需的配置(武将,铜钱,进阶丹) #铜钱计算公式 = 基础数值 + int(当前状态总共消耗铜钱 * 0.8) return_gold += base_gold + int(cost_update_gold * card_stove_gold_coe) #战魂计算公式 =(1 + 进阶到当前状态总消耗武将个数)* 系数 fight_soul += stove_card_fight_soul for talent_lv in range(1, int(cur_talent_lv)+1): cur_talent = advanced_talent_config[star].get(str(talent_lv),{}) cost_talent_gold = int(cur_talent.get('cost_gold',0)) cost_talent_card = int(cur_talent.get('card',0)) #武将 cost_talent_props = cur_talent.get('props',[]) #进阶丹 #铜钱计算公式 = 基础数值 + int(当前状态总共消耗铜钱 * 0.8) return_gold += int( cost_talent_gold * card_stove_gold_coe ) #进阶丹 = int(当前状态总消耗 * 0.8) if cost_talent_props: return_props += int(cost_talent_props[1] * card_stove_props_coe) #战魂计算公式 =(1 + 进阶到当前状态总消耗武将个数)* 系数 fight_soul += int(cost_talent_card * stove_card_fight_soul) # print '#### return_gold, return_props, fight_soul=', \ # return_gold, return_props, fight_soul #添加战魂 user_property_obj.add_fight_soul(fight_soul, 'stove') #返还进阶丹 user_pack_obj.add_props('8_props',return_props, 'stove') #用户删卡 user_card_obj.del_card_info(msg['cards_ucids'], where='stove') #返还铜钱 user_property_obj.add_gold(return_gold, 'stove') data = {'gold':return_gold,'fight_soul':fight_soul,'props':{'8_props':return_props}} #普通装备(1:武器(攻击),2:护甲(防御),3:头盔(血量),4:饰品(回复) elif category == 'common_equip': rc,msg = equip.equip_stove(rk_user,params) if rc: return rc,msg # category check,防止category和装备eid不匹配 for equip_info in msg['equips_info']: eid = equip_info['eid'] eqtype = game_config.equip_config[eid]['eqtype'] if eqtype not in [1, 2, 3, 4]: return 11,{'msg':utils.get_msg('mystery_store','category_not_match')} #获取普通装备计算系数 equip_exp_conf:装备等级配置 common_stove_gold_coe = float(game_config.equip_exp_config['common_stove_gold_coe']) #返回铜钱 return_gold = 0 for equip_info in msg['equips_info']: # equip_info 是 UserEquips实例的equips[ueid]字段 eid = equip_info['eid'] uetype = int(game_config.equip_config[eid]['eqtype']) #获取当前等级 cur_equip_lv = equip_info['cur_lv'] #获取当前经验(升级到该经验所需铜钱) cost_update_gold = equip_info['cur_experience'] #获取装备的星级 star = str(game_config.equip_config[eid].get('star',1)) #普通装备炼化基础值 equip_exp_config:装备等级配置 base_gold = int(game_config.equip_exp_config['common_base_gold'].get(star,500)) return_gold += int((base_gold + cost_update_gold) * common_stove_gold_coe) #用户删除装备 user_equip_obj.delete_equip(msg['equips_ueids'], where='stove') #返还铜钱 user_property_obj.add_gold(return_gold, 'stove') data = {'gold':return_gold} #宝物(5:兵法,6:坐骑) elif category == 'treasure_equip': rc,msg = equip.equip_stove(rk_user,params) if rc: return rc,msg # category check,防止category和装备eid不匹配 for equip_info in msg['equips_info']: eid = equip_info['eid'] eqtype = game_config.equip_config[eid]['eqtype'] if eqtype not in [5, 6]: return 11,{'msg':utils.get_msg('mystery_store','category_not_match')} #获取宝物计算系数 装备等级配置 treasure_stove_gold_coe = float(game_config.equip_exp_config['treasure_stove_gold_coe']) #返回铜钱 return_gold = 0 #返回道具 return_props = {} #返还的 不同等级的经验马/经验书数量 num_book4=num_book3=num_book2=num_book1=num_horse4=num_horse3=num_horse2=num_horse1 = 0 # 不同等级的经验马/经验书提供的经验 props_conf = game_config.props_config equip5_prop_list = [] equip6_prop_list = [] for prop_id in props_conf: if props_conf[prop_id].get('used_by') == 'equip5': equip5_prop_list.append((prop_id, props_conf[prop_id]['exp'])) elif props_conf[prop_id].get('used_by') == 'equip6': equip6_prop_list.append((prop_id, props_conf[prop_id]['exp'])) equip5_prop_list.sort(reverse=True) equip6_prop_list.sort(reverse=True) def calculate_rebate(prop_exp_list, all_exp): rebate_props = {} left_exp = all_exp for prop, exp in prop_exp_list: rebate_props[prop] = left_exp // exp left_exp = left_exp % exp if not left_exp: break return rebate_props for equip_info in msg['equips_info']: eid = equip_info['eid'] #宝物装备升级所消耗铜钱 cost_update_gold = equip_info['cur_experience'] * treasure_stove_gold_coe #获取装备的星级 star = str(game_config.equip_config[eid].get('star',1)) #宝物装备炼化基础值 base_gold = game_config.equip_exp_config['treasure_sell_gold'].get(star,500) eqtype = game_config.equip_config[eid]['eqtype'] #计算返还经验书的数量。经验书有不同等级,分别计算个数。5000 3000 1000 500为相应等级的经验书所提供的经验 if eqtype == 5: return_props.update(calculate_rebate(equip5_prop_list, cost_update_gold)) #计算返还经验马 逻辑同经验书 elif eqtype == 6: return_props.update(calculate_rebate(equip6_prop_list, cost_update_gold)) return_gold += int(base_gold + (cost_update_gold * treasure_stove_gold_coe)) #返还道具 for props_id in return_props: user_pack_obj.add_props(props_id,return_props[props_id], 'stove') #用户删除装备 user_equip_obj.delete_equip(msg['equips_ueids'], where='stove') #返还铜钱 user_property_obj.add_gold(return_gold, where='stove') data = {'gold':return_gold,'props':return_props} else: return 11,{'msg':utils.get_msg('mystery_store','no_stove_category')} # print '#### stove_info:', data return rc,{'stove_info':data}
def view_user(request): """ 更新用户信息 """ uid = request.GET.get('uid', '').strip() if not uid: pid = request.GET.get('pid', '').strip() if not pid: username = request.GET.get('username', '') if not username: return HttpResponseRedirect('/admin/user/?status=1') try: uid = ocapp.mongo_store.mongo.db['username'].find( {'name': username})[0]['uid'] except: return HttpResponseRedirect('/admin/user/?status=1') else: account = AccountMapping.get(pid) if not account: return HttpResponseRedirect('/admin/user/?status=1') uid = account.uid user = UserBase.get(uid) if not user or not user.account: return HttpResponseRedirect('/admin/user/?status=1') ##### view raw db data check_raw_db_data = request.GET.get('check_raw_db_data', '').strip() db_data_name = request.GET.get('db_data_name', '').strip() #using exec/eval, need consider safety, or user could provide malicious #string, do bad behavior if db_data_name and db_data_name not in raw_db_data_list: return HttpResponse( 'Wrong raw db data name, or not allowed to show yet') if check_raw_db_data in ('on', 'checked'): data = {'user': {}} data['user']['uid'] = uid data['user']['username'] = user.username module_name, data_class, db_data = db_data_name.split('.') #exec('from apps.models.' + module_name + ' import ' + data_class) exec 'from apps.models.' + module_name + ' import ' + data_class in globals( ), locals() if data_class == 'UserMail': raw_db_data = eval(data_class + '.hget("' + uid + '", "' + uid + '").' + db_data) else: raw_db_data = eval(data_class + '.get(' + uid + ').' + db_data) data['db_data_name'] = db_data_name data['raw_db_data'] = pformat(raw_db_data) return render_to_response('user/view_raw.html', data, RequestContext(request)) ###### end view raw db user_card_obj = UserCards.get(user.uid) user_equips_obj = UserEquips.get_instance(uid) user_property_obj = UserProperty.get(uid) user_pack_obj = UserPack.get_instance(uid) data = { 'user_property_obj': user_property_obj, 'user': user, 'deck_cards': [], 'other_cards': [], 'add_time': timestamp_toString(user.add_time), 'last_login_time': timestamp_toString(user.user_property.login_time), 'login_record': UserLogin.get(uid).login_info['login_record'], } if not user.client_type: data['client_type'] = 'appstore_ios' else: data['client_type'] = user.client_type all_cards = [] all_cids = game_config.card_config.keys() all_cids_cp = copy.deepcopy(game_config.card_config) for k, v in all_cids_cp.iteritems(): all_cids_cp[k]['no'] = int(k.split('_')[0]) all_cids.sort(key=lambda x: (all_cids_cp[x]['no'])) for cid in all_cids: all_cards.append(Card.get(cid)) data['all_cards'] = all_cards #用户当前战场信息 user_dungeon_obj = UserDungeon.get_Ex(user.uid) #pvp_obj = UserPvp.getEx(user.uid) #pvp 排名 top_model = pvp_redis.get_pvp_redis('1') rank = top_model.rank(uid) #pvp_obj.rank = rank+1 if rank != None else 0 #data['pvp'] = pvp_obj data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current'] #配置中的所有战场 data['all_dungeon'] = [] floor_ids = sorted( map(lambda x: int(x), game_config.normal_dungeon_config.keys())) for floor_id in floor_ids: for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)] ['rooms'].keys()): data['all_dungeon'].append('%d-%s' % (floor_id, room_id)) #用户已经达到最深层时 if '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon'] ['room_id']) == data['all_dungeon'][-1]: data['max_dungeon'] = True else: data['max_dungeon'] = False now_index = data['all_dungeon'].index( '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon']['room_id'])) data['all_dungeon'] = data['all_dungeon'][now_index + 1:] deck_num = 0 for card in user_card_obj.deck: if card: ucid = card['ucid'] card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.is_leader = card.get('leader', 0) eid = '' if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' this_card.now_exp = card_info['exp'] data['deck_cards'].append(this_card) deck_num += 1 else: data['deck_cards'].append(None) data['deck_num'] = deck_num other_ucids = user_card_obj.cards.keys() for card in user_card_obj.deck: ucid = card.get('ucid') if ucid: other_ucids.remove(ucid) for ucid in other_ucids: card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.now_exp = card_info['exp'] eid = '' if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' data['other_cards'].append(this_card) #重新整理 下编队 user_card_obj.decks #装备 equips = user_equips_obj.equips eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips] data['user_equips'] = [ game_config.equip_config[eid_dict['eid']] for eid_dict in eqids_dict ] all_equips_tag = sorted( [int(i.split('_')[0]) for i in game_config.equip_config.keys()]) data['all_equips'] = [(i, game_config.equip_config[str(i) + '_equip']) for i in all_equips_tag] #mat data['user_materials'] = { mid: { 'name': game_config.material_config[mid]['name'], 'num': user_pack_obj.materials[mid] } for mid in user_pack_obj.materials } all_materials_tag = sorted( [int(i.split('_')[0]) for i in game_config.material_config.keys()]) data['all_materials'] = [(i, game_config.material_config[str(i) + '_mat']) for i in all_materials_tag] # data['charge_sum_money'] = user.user_property.charge_sum_money data['last_charge_record'] = ChargeRecord.find( {'uid': uid})[-1] if ChargeRecord.find({'uid': uid}) else {} ######将魂系统############## data.update(soul.get_all(user, None)[1]) for sid, soul_conf in data['normal_souls'].items(): soul_conf['name'] = game_config.card_config[sid].get( 'star', '') + u'星 ' + game_config.card_config[sid].get('name', '') + u' 将魂' #data["index_list"] = request.index_list return render_to_response('user/view.html', data, RequestContext(request))
from apps.models.user_souls import UserSouls import json import copy import datetime from apps.common.utils import create_gen_id from apps.common import utils import time from apps.models import data_log_mod from apps.models import GameModel #uid = '9100214781' game_config.subareas_conf() game_config.set_subarea('1') up = UserProperty.get_instance(uid) pprint(up.property_info) def show_property_fields(): user_property_obj = UserProperty.get_instance(uid) print 'user_property_obj.property_info','-'*50 pprint(user_property_obj.property_info) #user_property_obj.property_info['wipe_out_times'] = 0 #user_property_obj.do_put() ''' print 'user_property_obj.charge_award_info','-'*50 print user_property_obj.charge_award_info print 'user_property_obj.consume_award_info','-'*50 print user_property_obj.consume_award_info print 'user_property_obj.month_item_info','-'*50 print user_property_obj.month_item_info '''
def modify_attr(): up = UserProperty.get_instance(uid) up.property_info['lv'] = 43 up.do_put()
def t_give_award(): user_property_obj = UserProperty.get_instance(uid) user_property_obj.give_award({'gold':3}) user_property_obj.do_put()
def add_card_exp(self, ucid, exp, where=None): """ 增加卡片经验值 args: ucid:卡片的唯一id exp:所要增加的经验值 return: { 'old_exp':原始经验 'old_lv':原始lv 'old_attack':原始攻击 'old_defense':原始防御 'new_exp':新经验 'new_lv’:新lv 'new_attack':新攻击 'new_defense':新防御 'max_lv':最大级别 } """ data = {} #获取武将对象 card_info = self.cards[ucid] #加经验 card_info['exp'] += exp #获取用户的等级 user_lv = UserPropertyMod.get(self.uid).lv all_lv = range(card_info['lv'], user_lv + 1) #初始化参数 new_lv = card_info['lv'] old_lv = card_info['lv'] cid_config = self.game_config.card_config[card_info['cid']] #获取可以升级的最大等级 for lv in all_lv: if lv <= new_lv: continue if card_info['exp'] >= self.game_config.card_level_config[ 'exp_type'][cid_config['exp_type']][str(lv)]: new_lv = lv else: break #判断是否大于用户的当前等级 if new_lv >= user_lv: card_info['exp'] = self.game_config.card_level_config['exp_type'][ cid_config['exp_type']][str(user_lv)] new_lv = user_lv card_info['lv'] = new_lv if old_lv < new_lv and where: #log message card_msg = { 'cid': card_info['cid'], 'ctype': cid_config['ctype'], 'lv': card_info['lv'], 'exp': card_info['exp'], 'name': cid_config['name'], 'star': cid_config['star'], 'defense': cid_config['defense'], 'attack': cid_config['attack'], } log_data = { 'where': where, 'ucid': ucid, 'card_msg': card_msg, } data_log_mod.set_log('CardUpdate', self, **log_data) self.put() return data
def get_user_lv(uid): ''' * 获取用户的等级 ''' up = UserProperty.get(uid) return up.property_info.get('lv', 1)
def edit_user(request): """ 编辑用户页 """ uid = request.GET.get('uid', '').strip() if not uid: pid = request.GET.get('pid', '').strip() if not pid: username = request.GET.get('username', '') if not username: return HttpResponseRedirect('/admin/user/?status=1') try: uid = ocapp.mongo_store.mongo.db['username'].find( {'name': username})[0]['uid'] except: return HttpResponseRedirect('/admin/user/?status=1') else: account = AccountMapping.get(pid) if not account: return HttpResponseRedirect('/admin/user/?status=1') uid = account.uid user = UserBase.get(uid) if not user or not user.account: return HttpResponseRedirect('/admin/user/?status=1') user_equips_obj = UserEquips.get_instance(uid) user_pack_obj = UserPack.get_instance(uid) user_property_obj = UserProperty.get(uid) user_card_obj = UserCards.get(user.uid) user_real_pvp_obj = user.user_real_pvp game_config.set_subarea(user.subarea) data = { 'deck_cards': [], 'other_cards': [], } if not user.client_type: data['client_type'] = 'appstore_ios' else: data['client_type'] = user.client_type all_cards = [] all_cids = game_config.card_config.keys() all_cids_cp = copy.deepcopy(game_config.card_config) for k, v in all_cids_cp.iteritems(): all_cids_cp[k]['no'] = int(k.split('_')[0]) all_cids.sort(key=lambda x: (all_cids_cp[x]['no'])) for cid in all_cids: all_cards.append(Card.get(cid)) data['all_cards'] = all_cards #用户当前战场信息 user_dungeon_obj = UserDungeon.get_instance(user.uid) #充值信息 data['charge_sum_money'] = user_property_obj.charge_sum_money data['last_charge_record'] = ChargeRecord.find( {'uid': uid})[-1] if ChargeRecord.find({'uid': uid}) else {} ######神秘商店 代码往前方 因为此操作会改变玩家武将,物品等信息############## # 刷新 物品列表 if request.POST.get('refresh_mystery_store', ''): store_type = request.POST.get('store_type') params = {} mystery_store.refresh_store_by_self(user, params) # 购买 物品 if request.POST.get('buy_mystery_store_goods', ''): store_type = request.POST.get('store_type') goods_index = int(request.POST.get('goods_index')) params = { 'store_type': store_type, 'goods_index': goods_index, } mystery_store.buy_store_goods(user, params) ######Pk商店 ## # 刷新 物品列表 if request.POST.get('refresh_pk_store', ''): pk_store.refresh_store_by_self(user, {}) # 购买 物品 if request.POST.get('buy_pk_store_goods', ''): goods_index = int(request.POST.get('goods_index')) params = { 'goods_index': goods_index, } pk_store.buy_store_goods(user, params) #################### moderator = auth.get_moderator_by_request(request) qa_edit = 'qa edited by ' + str(moderator.username) #提交状态 if request.method == "POST": state = int(request.POST.get("state", "0")) state = bool(state) #冻结 if state != user.in_frozen: if state: user.froze() #解冻 else: user.unfroze() #删除账号 if request.POST.get('del_user', ''): if not user.account: return HttpResponseRedirect('/admin/user/?status=1') user.account.delete() if request.POST.get('add_gold', ''): add_gold = int(request.POST.get('add_gold')) if add_gold > 0: user_property_obj.add_gold(add_gold, where=qa_edit) else: user_property_obj.minus_gold(add_gold) #增加元宝 if request.POST.get('add_coin', ''): add_coin = int(request.POST.get('add_coin')) if add_coin > 0: user_property_obj.add_coin(add_coin, where=qa_edit) else: user_property_obj.minus_coin(add_coin, where=qa_edit) #增加 经验点 if request.POST.get('add_card_point', ''): add_card_point = int(request.POST.get('add_card_point')) if add_card_point > 0: user_property_obj.add_card_exp_point(add_card_point, qa_edit) else: user_property_obj.minus_card_exp_point(add_card_point, qa_edit) #增加经验 if request.POST.get('add_exp', ''): add_exp = int(request.POST.get('add_exp')) user_property_obj.add_exp(add_exp, where=qa_edit) #更改等级 if request.POST.get('modify_lv', ''): lv = request.POST.get('modify_lv') lv_exp = game_config.user_level_config[lv]['exp'] now_exp = user_property_obj.property_info['exp'] user_property_obj.add_exp(lv_exp - now_exp, where=qa_edit) # 增加pk 积分 if request.POST.get('add_pk_pt', 0): pvp_pt = int(request.POST.get('add_pk_pt')) user_real_pvp_obj.add_pt(pvp_pt) # 加功勋 if request.POST.get('add_honor', ''): honor = int(request.POST.get('add_honor')) urp = UserRealPvp.get(user.uid) urp.add_honor(honor, where=qa_edit) # 加战魂 if request.POST.get('add_fight_soul', ''): fight_soul_num = int(request.POST.get('add_fight_soul')) user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit) #发邮件 if request.POST.get('mail_title') or request.POST.get('mail_goods'): from apps.models.user_mail import UserMail from apps.common import utils sid = 'system_%s' % (utils.create_gen_id()) mail_title = request.POST.get('mail_title', '') mail_content = request.POST.get('mail_content', '') goods_str = request.POST.get('mail_goods', '').strip() award = {} for goods_info in goods_str.split(";"): goods_info = goods_info.strip() print "debug guochen email", goods_info if not goods_info: continue goods_id, num = goods_info.strip().split(":") award.setdefault(goods_id, 0) award[goods_id] += int(num) mailtype = 'system_qa' user_mail_obj = UserMail.hget(uid, sid) user_mail_obj.set_mail(mailtype=mailtype, title=mail_title, content=mail_content, award=award) # 修改vip等级 if request.POST.get('modify_vip_lv'): vip_lv = request.POST.get('modify_vip_lv') vip_conf = game_config.user_vip_config.get(str(vip_lv)) if vip_conf: coin = vip_conf['coin'] user_property_obj.property_info["charge_coins"] = coin user_property_obj.put() #补武将 if request.POST.get("add_card_ex", ""): user_card_obj = UserCards.get(user.uid) strCardInfo = request.POST.get("add_card_ex") lstCardInfo = strCardInfo.strip().split(";") for strAddCard in lstCardInfo: cid = strAddCard.split(":")[0] cid = cid.strip() + '_card' num = int(strAddCard.split(":")[1]) for i in range(num): clv = 1 user_card_obj.add_card(cid, clv, where=qa_edit) #增加武将 if request.POST.getlist('add_card'): add_cids = request.POST.getlist('add_card') user_card_obj = UserCards.get(user.uid) for add_cid in add_cids: if add_cid in game_config.card_config: clv = 1 user_card_obj.add_card(add_cid, clv, where=qa_edit) #增加武将经验 if request.POST.get('add_card_exp', ''): add_exp = int(request.POST.get('add_card_exp')) ucid = request.POST.get('ucid') user_card_obj.add_card_exp(ucid, add_exp) #增加武将技能级别 if request.POST.get('add_card_sk_lv', ''): ucid = request.POST.get('ucid') user_card_obj.add_card_sk_lv(ucid) #卖掉卡片 if request.POST.get('sell_card', ''): ucid = request.POST.get('ucid') #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv']) user_card_obj.del_card_info([ucid]) #user.user_property.add_gold(this_card.sell_gold,where=qa_edit) #踢出队伍 if request.POST.get('kick_deck', ''): kick_index = int(request.POST.get('deck_index')) if user_card_obj.deck[kick_index].get( 'ucid', '') != user_card_obj.get_leader( user_card_obj.cur_deck_index): user_card_obj.deck[kick_index] = {} user_card_obj.put() #设置主将 if request.POST.get('set_deck_main', ''): ucid = request.POST.get('ucid') find_fg = False for card in user_card_obj.deck: if card.get('leader', 0): card['ucid'] = ucid user_card_obj.put() find_fg = True break if not find_fg: user_card_obj.deck[0] = {'ucid': ucid, 'leader': 1} user_card_obj.put() #设置副将 if request.POST.get('set_deck_sub', ''): ucid = request.POST.get('ucid') for card in user_card_obj.deck: if not card: card['ucid'] = ucid user_card_obj.put() break #一键送所有武将碎片 if request.POST.get('give_all_card_soul', ''): for cid in game_config.card_config: user_card_obj.add_card(cid, 1, where=qa_edit) user_card_obj.put() #一键送所有武将 if request.POST.get('give_all_card', ''): #一键送所有武将 for cid in all_cids: ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2] # if request.POST.get('give_all_card',''): # user_card_obj.cards = {} # user_card_obj.cards_info = { # "decks":[[{}] * 5] * 10, # "cur_deck_index":0, # } # for eid in user_equips_obj.equips: # if user_equips_obj.equips[eid].get("used_by"): # user_equips_obj.equips[eid]['used_by'] = '' # user_equips_obj.put() # card_index = 0 # for cid in all_cids: # clv = 1 # ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2] # if card_index < 5: # user_card_obj.deck[card_index]['ucid'] = ucid # card_index += 1 #一键删除军队外的所有武将 if request.POST.get('del_other_card', ''): decks = [] for deck in user_card_obj.decks: decks.extend( [card['ucid'] for card in deck if card.get('ucid', '')]) del_cids = filter(lambda x: x not in decks, user_card_obj.cards.keys()) user_card_obj.del_card_info(del_cids) for eid in user_equips_obj.equips: if user_equips_obj.equips[eid].get("used_by"): user_equips_obj.equips[eid]['used_by'] = '' user_equips_obj.put() #开放战场 if request.POST.get('open_dungeon', ''): open_dungeon = request.POST.get('open_dungeon') floor_id = open_dungeon.split('-')[0] room_id = open_dungeon.split('-')[1] user_dungeon_obj.dungeon_info['normal_current'][ 'floor_id'] = floor_id user_dungeon_obj.dungeon_info['normal_current'][ 'room_id'] = room_id user_dungeon_obj.dungeon_info['normal_current']['status'] = 0 user_dungeon_obj.put() #回复体力 if request.POST.get('add_stamina', ''): add_stamina = int(request.POST.get('add_stamina')) user_property_obj.add_stamina(add_stamina) #equip if request.POST.get("add_equips", ""): user_equips_obj = UserEquips.get(uid) strEquipsInfo = request.POST.get("add_equips") lstEquipsInfo = strEquipsInfo.strip().split(";") for strAddEquip in lstEquipsInfo: eid = strAddEquip.split(":")[0] eid = eid.strip() + '_equip' num = int(strAddEquip.split(":")[1]) for i in range(num): user_equips_obj.add_equip(eid, where=qa_edit) #材料 if request.POST.get("add_mats", ""): strItemsInfo = request.POST.get("add_mats") lstItemsInfo = strItemsInfo.strip().split(";") for strAddItem in lstItemsInfo: mid = strAddItem.split(":")[0] mid = mid.strip() + '_mat' num = int(strAddItem.split(":")[1]) user_pack_obj.add_material(mid, num, where=qa_edit) #道具 if request.POST.get("add_props", ""): strPropsInfo = request.POST.get("add_props") lstPropsInfo = strPropsInfo.strip().split(";") for strAddProps in lstPropsInfo: pid = strAddProps.split(":")[0] pid = pid.strip() + '_props' num = int(strAddProps.split(":")[1]) user_pack_obj.add_props(pid, num, where=qa_edit) if request.POST.get("add_materials_num", 0): mid = request.POST.get("mid") user_pack_obj.add_material( mid, int(request.POST.get("add_materials_num", 0)), where=qa_edit) if request.POST.get("add_props_num", 0): pid = request.POST["prop"] user_pack_obj.add_props(pid, int(request.POST.get("add_props_num", 0)), where=qa_edit) if request.POST.get('give_all_props'): num = int(request.POST.get('all_props_num')) if request.POST.get( 'all_props_num') else 99 for iid in game_config.props_config: user_pack_obj.add_props(iid, num, where=qa_edit) if request.POST.get('del_all_props'): user_pack_obj.props = {} user_pack_obj.put() if request.POST.get('give_all_equips'): user_equips = UserEquips.get(uid) for eid in game_config.equip_config: user_equips.add_equip(eid, where=qa_edit) #一键送所有的装备碎片 if request.POST.get('give_all_equip_soul'): user_souls_obj = UserSouls.get(uid) for eid in game_config.equip_config: if game_config.equip_config[eid].get('need_soul_types_num', 0): parts = game_config.equip_config[eid].get( 'need_soul_types_num', 0) for i in xrange(1, parts + 1): user_souls_obj.add_equip_soul(eid + '_' + str(i), 100, where=qa_edit) else: user_souls_obj.add_equip_soul(eid, 1, where=qa_edit) #一键删除所有的装备碎片 if request.POST.get('del_all_equip_soul'): user_souls_obj = UserSouls.get(uid) user_souls_obj.equip_souls_info = {} user_souls_obj.put() #添加单个装备碎片 if request.POST.get('add_single_equip_soul'): sid = request.POST.get('sid') num = int(request.POST.get('add_single_equip_soul')) user_souls_obj = UserSouls.get_instance(uid) user_souls_obj.add_equip_soul(sid, num, where=qa_edit) user_souls_obj.put() if request.POST.get('del_other_equips'): user_equips = UserEquips.get(uid) ueids = [ ueid for ueid in user_equips.equips if not user_equips.is_used(ueid) ] user_equips.delete_equip(ueids) if request.POST.get('give_all_materials'): num = int(request.POST.get('all_materials_num') ) if request.POST.get('all_materials_num') else 99 user_pack_obj = UserPack.get_instance(uid) for mid in game_config.material_config: user_pack_obj.add_material(mid, num, where=qa_edit) if request.POST.get('del_all_materials'): user_pack_obj = UserPack.get_instance(uid) user_pack_obj.materials = {} user_pack_obj.put() #一键过新手引导 if request.POST.get('newbie_pass', '') and user.user_property.newbie: newbie_steps_num = int( user.game_config.system_config.get('newbie_steps', 6)) user.user_property.property_info['newbie_steps'] = ( 1 << newbie_steps_num) - 1 user.user_property.set_newbie() user.user_property.do_put() data['status'] = 1 data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current'] #配置中的所有战场 data['all_dungeon'] = [] floor_ids = sorted( map(lambda x: int(x), game_config.normal_dungeon_config.keys())) for floor_id in floor_ids: for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)] ['rooms'].keys()): data['all_dungeon'].append('%d-%s' % (floor_id, room_id)) #用户已经达到最深层时 if '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon'] ['room_id']) == data['all_dungeon'][-1]: data['max_dungeon'] = True else: data['max_dungeon'] = False now_index = data['all_dungeon'].index( '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon']['room_id'])) data['all_dungeon'] = data['all_dungeon'][now_index + 1:] #装备 equips = user_equips_obj.equips eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips] data['user_equips'] = [ game_config.equip_config.get(eid_dict['eid']) for eid_dict in eqids_dict ] all_equips_tag = sorted( [int(i.split('_')[0]) for i in game_config.equip_config.keys()]) data['all_equips'] = [(i, game_config.equip_config.get(str(i) + '_equip')) for i in all_equips_tag] #mat data['user_materials'] = { mid: { 'name': game_config.material_config.get(mid, {}).get('name', ''), 'num': user_pack_obj.materials[mid] } for mid in user_pack_obj.materials } all_materials_tag = sorted( [int(i.split('_')[0]) for i in game_config.material_config.keys()]) data['all_materials'] = [(i, game_config.material_config.get(str(i) + '_mat')) for i in all_materials_tag] #props data['user_props'] = { pid: { 'name': game_config.props_config.get(pid, {}).get('name'), 'num': user_pack_obj.props[pid] } for pid in user_pack_obj.props } all_props_tag = sorted( [int(i.split('_')[0]) for i in game_config.props_config.keys()]) data['all_props'] = [(i, game_config.props_config.get(str(i) + '_props')) for i in all_props_tag] ######将魂系统 代码要在其他逻辑偏后 以保证是最新的信息############## user_souls_obj = UserSouls.get_instance(uid) # 添加 普通将魂 if request.POST.get('add_normal_soul', ''): add_normal_soul_num = int(request.POST.get('add_normal_soul')) sid = request.POST.get('sid') user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit) # 批量添加 普通将魂 if request.POST.get('dump_normal_soul'): dump_normal_soul_str = request.POST.get('dump_normal_soul').strip() for item in dump_normal_soul_str.split(';'): sid, num = item.split(':') user_souls_obj.add_normal_soul(sid + '_card', int(num), where=qa_edit) # 批量添加 装备碎片 if request.POST.get('add_equip_soul'): add_equip_soul_str = request.POST.get('add_equip_soul').strip() for equip_info in add_equip_soul_str.split(';'): eid, num = equip_info.split(':') user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit) # 添加 英雄将魂 if request.POST.get('add_super_soul', ''): add_super_soul_num = int(request.POST.get('add_super_soul')) if add_super_soul_num >= 0: user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit) else: user_souls_obj.minus_card_soul('super_soul', -add_super_soul_num, where=qa_edit) # 武将碎片兑换武将 if request.POST.get('soul_exchange_card'): sid = request.POST.get('sid') params = {'cid': sid} user['uid'] = uid soul.exchange_card(user, params) # 删除将魂 if request.POST.get('delete_card_soul'): sid = request.POST.get('sid') num = int(request.POST.get('num')) user_souls_obj = UserSouls.get_instance(uid) user_souls_obj.minus_card_soul(sid, num, where=qa_edit) user_souls_obj.put() data.update(copy.deepcopy(soul.get_all(user, None)[1])) #武将碎片的显示 for sid, soul_conf in data['normal_souls'].items(): soul_conf['name'] = game_config.card_config[sid].get( 'star', '') + u'星 ' + game_config.card_config[sid].get('name', '') + u' 碎片' #装备碎片的显示 for sid, soul_conf in data['equip_souls_info'].items(): all_parts = sid.split('_') if len(all_parts) == 2: soul_conf['name'] = str(game_config.equip_config[sid].get( 'star', '')) + u'星 ' + game_config.equip_config[sid].get( 'name', '') + u' 碎片' else: sid = '%s_%s' % (all_parts[0], all_parts[1]) soul_conf['name'] = str(game_config.equip_config[sid].get( 'star', '')) + u'星 ' + game_config.equip_config[sid].get( 'name', '') + u' 碎片第%s部分' % all_parts[2] # 获取玩家武将信息 代码往后放 以保证是最新的信息 deck_num = 0 for card in user_card_obj.deck: if card: ucid = card['ucid'] card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.is_leader = card.get('leader', 0) eid = '' #user_card_obj.get_eid(ucid) if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' this_card.now_exp = card_info['exp'] data['deck_cards'].append(this_card) deck_num += 1 else: data['deck_cards'].append(None) data['deck_num'] = deck_num other_ucids = user_card_obj.cards.keys() for card in user_card_obj.deck: ucid = card.get('ucid') if ucid and ucid in other_ucids: other_ucids.remove(ucid) for ucid in other_ucids: card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.now_exp = card_info['exp'] eid = '' #user_card_obj.get_eid(ucid) if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' data['other_cards'].append(this_card) #重新整理 下编队 user_card_obj.decks # 邮件 show_mails = mails.show_mails(user, {})['show_mails'] temp_mails = show_mails.values() # 整理awards内容,就显示good_id和num for mail in temp_mails: for award in mail['awards'][:]: if not 'good_id' in award.values()[0]: continue mail['awards'].append({ award.values()[0]['good_id']: award.values()[0].get('num', 0) }) mail['awards'].pop(0) data.update({ 'mails': sorted(temp_mails, key=operator.itemgetter('can_get', 'create_time'), reverse=True), 'user_property_obj': user_property_obj, 'user': user, 'add_time': timestamp_toString(user.add_time), 'last_login_time': timestamp_toString(user.user_property.login_time), 'login_record': UserLogin.get(uid).login_info['login_record'], 'user_real_pvp_obj': user_real_pvp_obj.pvp_detail, 'mystery_store': mystery_store.get_store_info(user, {}), 'pk_store': pk_store.get_store_info(user, {}), }) return 'user/edit.html', data
def view_user(request): """ 更新用户信息 """ uid = request.GET.get('uid','').strip() if not uid: pid = request.GET.get('pid','').strip() if not pid: username = request.GET.get('username','') if not username: return HttpResponseRedirect('/admin/user/?status=1') try: uid=ocapp.mongo_store.mongo.db['username'].find({'name':username})[0]['uid'] except: return HttpResponseRedirect('/admin/user/?status=1') else: account = AccountMapping.get(pid) if not account: return HttpResponseRedirect('/admin/user/?status=1') uid = account.uid user = UserBase.get(uid) if not user or not user.account: return HttpResponseRedirect('/admin/user/?status=1') ##### view raw db data check_raw_db_data = request.GET.get('check_raw_db_data','').strip() db_data_name = request.GET.get('db_data_name','').strip() #using exec/eval, need consider safety, or user could provide malicious #string, do bad behavior if db_data_name and db_data_name not in raw_db_data_list: return HttpResponse('Wrong raw db data name, or not allowed to show yet') if check_raw_db_data in ('on', 'checked'): data={ 'user': {} } data['user']['uid'] = uid data['user']['username'] = user.username module_name, data_class, db_data = db_data_name.split('.') #exec('from apps.models.' + module_name + ' import ' + data_class) exec 'from apps.models.' + module_name + ' import ' + data_class in globals(), locals() if data_class == 'UserMail': raw_db_data = eval(data_class + '.hget("' + uid + '", "' + uid + '").' + db_data ) else: raw_db_data = eval(data_class + '.get(' + uid + ').' + db_data ) data['db_data_name'] = db_data_name data['raw_db_data'] = pformat(raw_db_data) return render_to_response('user/view_raw.html', data, RequestContext(request)) ###### end view raw db user_card_obj = UserCards.get(user.uid) user_equips_obj = UserEquips.get_instance(uid) user_property_obj = UserProperty.get(uid) user_pack_obj = UserPack.get_instance(uid) data = { 'user_property_obj':user_property_obj, 'user':user, 'deck_cards':[], 'other_cards':[], 'add_time':timestamp_toString(user.add_time), 'last_login_time':timestamp_toString(user.user_property.login_time), 'login_record':UserLogin.get(uid).login_info['login_record'], } if not user.client_type: data['client_type'] = 'appstore_ios' else: data['client_type'] = user.client_type all_cards = [] all_cids = game_config.card_config.keys() all_cids_cp = copy.deepcopy(game_config.card_config) for k,v in all_cids_cp.iteritems(): all_cids_cp[k]['no'] = int(k.split('_')[0]) all_cids.sort(key = lambda x :(all_cids_cp[x]['no'])) for cid in all_cids: all_cards.append(Card.get(cid)) data['all_cards'] = all_cards #用户当前战场信息 user_dungeon_obj = UserDungeon.get_Ex(user.uid) #pvp_obj = UserPvp.getEx(user.uid) #pvp 排名 top_model = pvp_redis.get_pvp_redis('1') rank = top_model.rank(uid) #pvp_obj.rank = rank+1 if rank != None else 0 #data['pvp'] = pvp_obj data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current'] #配置中的所有战场 data['all_dungeon'] = [] floor_ids = sorted(map(lambda x:int(x),game_config.normal_dungeon_config.keys())) for floor_id in floor_ids: for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]['rooms'].keys()): data['all_dungeon'].append('%d-%s' % (floor_id,room_id)) #用户已经达到最深层时 if '%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']) == data['all_dungeon'][-1]: data['max_dungeon'] = True else: data['max_dungeon'] = False now_index = data['all_dungeon'].index('%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id'])) data['all_dungeon'] = data['all_dungeon'][now_index + 1:] deck_num = 0 for card in user_card_obj.deck: if card: ucid = card['ucid'] card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.is_leader = card.get('leader',0) eid = '' if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' this_card.now_exp = card_info['exp'] data['deck_cards'].append(this_card) deck_num += 1 else: data['deck_cards'].append(None) data['deck_num'] = deck_num other_ucids = user_card_obj.cards.keys() for card in user_card_obj.deck: ucid = card.get('ucid') if ucid: other_ucids.remove(ucid) for ucid in other_ucids: card_info = user_card_obj.cards[ucid] this_card = Card.get_from_dict(card_info) this_card.ucid = ucid this_card.now_exp = card_info['exp'] eid = '' if eid: this_card.equip = game_config.equip_config[eid]['name'] else: this_card.equip = '' data['other_cards'].append(this_card) #重新整理 下编队 user_card_obj.decks #装备 equips = user_equips_obj.equips eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips ] data['user_equips'] = [game_config.equip_config[eid_dict['eid']] for eid_dict in eqids_dict] all_equips_tag = sorted([int(i.split('_')[0]) for i in game_config.equip_config.keys()]) data['all_equips'] = [(i,game_config.equip_config[str(i)+'_equip']) for i in all_equips_tag] #mat data['user_materials'] = {mid :{'name':game_config.material_config[mid]['name'],'num':user_pack_obj.materials[mid]} for mid in user_pack_obj.materials } all_materials_tag = sorted([int(i.split('_')[0]) for i in game_config.material_config.keys()]) data['all_materials'] = [(i,game_config.material_config[str(i)+'_mat']) for i in all_materials_tag] # data['charge_sum_money'] = user.user_property.charge_sum_money data['last_charge_record'] = ChargeRecord.find({'uid':uid})[-1] if ChargeRecord.find({'uid':uid}) else {} ######将魂系统############## data.update(soul.get_all(user, None)[1]) for sid, soul_conf in data['normal_souls'].items(): soul_conf['name'] = game_config.card_config[sid].get('star','') + u'星 ' + game_config.card_config[sid].get('name','') + u' 将魂' #data["index_list"] = request.index_list return render_to_response('user/view.html',data,RequestContext(request))
def add_card_exp(self,ucid,exp,where=None): """ 增加卡片经验值 args: ucid:卡片的唯一id exp:所要增加的经验值 return: { 'old_exp':原始经验 'old_lv':原始lv 'old_attack':原始攻击 'old_defense':原始防御 'new_exp':新经验 'new_lv’:新lv 'new_attack':新攻击 'new_defense':新防御 'max_lv':最大级别 } """ data = {} #获取武将对象 card_info = self.cards[ucid] #加经验 card_info['exp'] += exp #获取用户的等级 user_lv = UserPropertyMod.get(self.uid).lv all_lv = range(card_info['lv'],user_lv + 1) #初始化参数 new_lv = card_info['lv'] old_lv = card_info['lv'] cid_config = self.game_config.card_config[card_info['cid']] #获取可以升级的最大等级 for lv in all_lv: if lv <= new_lv: continue if card_info['exp'] >= self.game_config.card_level_config['exp_type'][cid_config['exp_type']][str(lv)]: new_lv = lv else: break #判断是否大于用户的当前等级 if new_lv>=user_lv: card_info['exp'] = self.game_config.card_level_config['exp_type'][cid_config['exp_type']][str(user_lv)] new_lv = user_lv card_info['lv'] = new_lv if old_lv < new_lv and where: #log message card_msg = { 'cid': card_info['cid'], 'ctype': cid_config['ctype'], 'lv': card_info['lv'], 'exp': card_info['exp'], 'name': cid_config['name'], 'star': cid_config['star'], 'defense': cid_config['defense'], 'attack': cid_config['attack'], } log_data = { 'where':where, 'ucid':ucid, 'card_msg': card_msg, } data_log_mod.set_log('CardUpdate', self, **log_data) self.put() return data
def get_box_gift(rk_user, params): ''' * 领取宝箱奖励 ''' data = {} get_step = params.get('step', '0') floor_id = params.get('floor_id') box_type = params.get('box_type') dungeon_config = game_config.dungeon_world_config.get('box_info', {}) floor_conf = dungeon_config.get(floor_id, {}) if not box_type in floor_conf: return 11, {'msg': utils.get_msg('dungeon', 'no_box_config')} box_info = floor_conf[box_type] if get_step == '0': #处理前端要显示的宝箱的内容 data['box_info'] = utils.format_award(box_info) data['box_star'] = int(floor_conf[box_type + '_star']) return 0, data elif get_step == '1': #处理前端要领取的宝箱信息 user_dungeon_obj = UserDungeon.get(rk_user.uid) has_played_info_copy = copy.deepcopy(user_dungeon_obj.has_played_info) if floor_id in has_played_info_copy.get('normal', {}): floor_info = has_played_info_copy['normal'][floor_id] #查看领取条件是否合适 floor_get_star = floor_info['cur_star'] if floor_get_star < int(floor_conf[box_type + '_star']): return 11, { 'msg': utils.get_msg('dungeon', 'box_can_not_open') } if floor_info[box_type]: #宝箱已领取情况 return 11, { 'msg': utils.get_msg('dungeon', 'has_got_box_award') } else: #领取宝箱逻辑 格式化内容 award = utils.format_award(box_info) user_property_obj = UserProperty.get(rk_user.uid) #将宝箱里面的内容添加到用户信息里面 award_info = user_property_obj.test_give_award(award, where='get_' + box_type) #格式化要返回的内容 data['award_info'] = award_info data['floor_info'] = {} data['floor_info']['floor_id'] = floor_id data['floor_info']['box_type'] = box_type data['floor_info']['box_flag'] = True #重置标志位 user_dungeon_obj.has_played_info['normal'][floor_id][ box_type] = True user_dungeon_obj.put() #判断新手引导 newbie_step = int(params.get('newbie_step', 0)) if newbie_step: rk_user.user_property.set_newbie_steps( newbie_step, "get_box_gift") #结果返回 return 0, data else: return 11, { 'msg': utils.get_msg('dungeon', 'invalid_dungeon_info') } else: #未识别的内容 return 11, {'msg': utils.get_msg('dungeon', 'invalid_dungeon_info')}
def add_vip_lv(): user_property = UserProperty.get_instance(uid) user_property.add_charge_sumcoin(10) # vip lv 1 #user_property.property_info["charge_sumcoin"] = 0 # vip lv 0 user_property.do_put()