def add_request(rk_user, params): """ 添加好友的请求 """ fid = params.get("fid", "") # 检查好友id是否存在 if "npc" in fid: return 0, {} friend_user = UserBase.get(fid) if not friend_user: return 11, {"msg": utils.get_msg("user", "no_user")} rc, msg = __check_can_add_friend(rk_user, friend_user) if rc: return rc, {"msg": msg} else: user_friend_obj = Friend.get(rk_user.uid) friend_friend_obj = Friend.get(fid) # 如果对方申请过加自己为好友,则直接建立好友关系 if fid in user_friend_obj.requests: # 将对方加入到自己的好友列表 user_friend_obj.add_friend(fid) # 将自己加入到对方的好友列表 friend_friend_obj.add_friend(rk_user.uid) # 将对方从自己的申请列表中删除 user_friend_obj.del_request(fid) # 将自己从好友的申请列表中删除 friend_friend_obj.del_self_request(rk_user.uid) else: user_friend_obj.self_requests[fid] = int(time.time()) user_friend_obj.put() friend_friend_obj.add_request(rk_user.uid) return 0, {}
def add_request(rk_user,params): """ 添加好友的请求 """ fid = params.get('fid','') #检查好友id是否存在 if 'npc' in fid: return 0, {} friend_user = UserBase.get(fid) if not friend_user: return 11,{'msg':utils.get_msg('user','no_user')} rc,msg = __check_can_add_friend(rk_user,friend_user) if rc: return rc,{'msg':msg} else: user_friend_obj = Friend.get(rk_user.uid) friend_friend_obj = Friend.get(fid) #如果对方申请过加自己为好友,则直接建立好友关系 if fid in user_friend_obj.requests: #将对方加入到自己的好友列表 user_friend_obj.add_friend(fid) #将自己加入到对方的好友列表 friend_friend_obj.add_friend(rk_user.uid) #将对方从自己的申请列表中删除 user_friend_obj.del_request(fid) #将自己从好友的申请列表中删除 friend_friend_obj.del_self_request(rk_user.uid) else: user_friend_obj.self_requests[fid] = int(time.time()) user_friend_obj.put() friend_friend_obj.add_request(rk_user.uid) return 0,{}
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 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 recover_copy(): """ * 重置副本次数 """ rk_user = UserBase.get(uid) recover_copy_coin = game_config.system_config['recover_copy_coin'] #检查vip可以回复的次数到了没 if not vip.check_limit_recover(rk_user,'recover_copy'): return 11,{'msg':utils.get_msg('user','max_recover_copy_times')} else: try: #检测参数是否合法 dungeon_type = 'normal' floor_id = '1' room_id = '1' except: return 11,{'msg':utils.get_msg('dungeon','invalid_dungeon_info')} #检查用户coin是否足够 if not rk_user.user_property.minus_coin(recover_copy_coin, 'recover_copy'): return 11,{'msg':utils.get_msg('user','not_enough_coin')} #添加回复次数 rk_user.user_property.add_recover_times('recover_copy',dungeon_type) user_dungeon_obj = UserDungeon.get(rk_user.uid) user_dungeon_obj.recover_copy(dungeon_type,floor_id,room_id) rk_user.user_property.do_put() user_dungeon_obj.do_put() return 0,{}
def accept_request(rk_user, params): """ 同意好友申请 """ fid = params["fid"] user_friend_obj = Friend.get(rk_user.uid) # 检查是否有这条请求 if not fid in user_friend_obj.requests: return 11, {"msg": utils.get_msg("friend", "no_request")} friend_obj = UserBase.get(fid) friend_friend_obj = Friend.get(fid) rc, msg = __check_can_add_friend(rk_user, friend_obj) if rc: return rc, {"msg": msg} else: # 将对方加入到自己的好友列表 user_friend_obj.add_friend(fid) # 将自己加入到对方的好友列表 friend_friend_obj.add_friend(rk_user.uid) if rk_user.uid in friend_friend_obj.self_requests: friend_friend_obj.self_requests.pop(rk_user.uid) friend_friend_obj.put() # 将对方从自己的申请列表中删除 user_friend_obj.del_request(fid) return 0, {}
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 _bind_new_platform(request, platform_name, platform_openId, old_account, result): subarea = request.REQUEST.get("subarea", "1") fg = False msg = '' pid = md5.md5(platform_name + str(platform_openId)).hexdigest() #检查新账户是否已经被关联 account_mapping_obj = AccountMapping.get(pid) if account_mapping_obj: msg = get_msg('login', 'already_bind') return fg, pid, msg #检查被绑定用户类型是否是oc old_user_obj = UserBase.get(old_account.get_subarea_uid(subarea)) if old_user_obj.baseinfo['platform'] != 'oc': msg = get_msg('login', 'already_bind') return fg, pid, msg fg = True #创建新账户,将旧账户uid关联到新账户后,删除旧账户 account_mapping_obj = AccountMapping.create(pid) account_mapping_obj.subarea_uids = old_account.subarea_uids account_mapping_obj.put() #删除oc账户 old_account.delete() #给request安装用户 request.rk_user = UserBase._install(pid, platform_name, subarea=subarea) request.rk_user.baseinfo['pid'] = pid request.rk_user.baseinfo['platform'] = platform_name request.rk_user.baseinfo['bind_time'] = int(time.time()) request.rk_user.put() update_function = request.rk_user.update_platform_openid(platform_name, platform_openId) if update_function: update_function(result) return fg, pid, msg
def accept_request(rk_user,params): """ 同意好友申请 """ fid = params['fid'] user_friend_obj = Friend.get(rk_user.uid) #检查是否有这条请求 if not fid in user_friend_obj.requests: return 11,{'msg':utils.get_msg('friend','no_request')} friend_obj = UserBase.get(fid) friend_friend_obj = Friend.get(fid) rc,msg = __check_can_add_friend(rk_user,friend_obj) if rc: return rc,{'msg':msg} else: #将对方加入到自己的好友列表 user_friend_obj.add_friend(fid) #将自己加入到对方的好友列表 friend_friend_obj.add_friend(rk_user.uid) if rk_user.uid in friend_friend_obj.self_requests: friend_friend_obj.self_requests.pop(rk_user.uid) friend_friend_obj.put() #将对方从自己的申请列表中删除 user_friend_obj.del_request(fid) return 0,{}
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 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 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 _bind_new_platform(request, platform_name, platform_openId, old_account, result): subarea = request.REQUEST.get("subarea", "1") fg = False msg = '' pid = md5.md5(platform_name + str(platform_openId)).hexdigest() #检查新账户是否已经被关联 account_mapping_obj = AccountMapping.get(pid) if account_mapping_obj: msg = get_msg('login', 'already_bind') return fg, pid, msg #检查被绑定用户类型是否是oc old_user_obj = UserBase.get(old_account.get_subarea_uid(subarea)) if old_user_obj.baseinfo['platform'] != 'oc': msg = get_msg('login', 'already_bind') return fg, pid, msg fg = True #创建新账户,将旧账户uid关联到新账户后,删除旧账户 account_mapping_obj = AccountMapping.create(pid) account_mapping_obj.subarea_uids = old_account.subarea_uids account_mapping_obj.put() #删除oc账户 old_account.delete() #给request安装用户 request.rk_user = UserBase._install(pid, platform_name, subarea=subarea) request.rk_user.baseinfo['pid'] = pid request.rk_user.baseinfo['platform'] = platform_name request.rk_user.baseinfo['bind_time'] = int(time.time()) request.rk_user.put() update_function = request.rk_user.update_platform_openid( platform_name, platform_openId) if update_function: update_function(result) return fg, pid, msg
def lv_top(request): data = [] lv_top_100_list = lv_top_model.get(100) for uid, lv in lv_top_100_list: tmp = {} tmp['uid'] = uid tmp['lv'] = int(lv) tmp['username'] = UserBase.get(uid).username data.append(tmp) return "admin/lv_top.html", {'data': data}
def lv_top(request): data = [] lv_top_100_list = lv_top_model.get(100) for uid,lv in lv_top_100_list: tmp = {} tmp['uid'] = uid tmp['lv'] = int(lv) tmp['username'] = UserBase.get(uid).username data.append(tmp) return "admin/lv_top.html", {'data':data}
def charge_result_360(request): """充值回调 """ pay_dict = {} pay_dict['app_uid'] = str(request.REQUEST['app_uid'])#应用内用户ID pay_dict['order_id'] = str(request.REQUEST['order_id'])#360支付订单号 pay_dict['app_key'] = str(request.REQUEST['app_key'])#应用app key pay_dict['product_id'] = str(request.REQUEST['product_id'])#所购商品id pay_dict['amount'] = str(request.REQUEST['amount'])#总价,单价,分 pay_dict['app_order_id'] = str(request.REQUEST.get('app_order_id', ''))#应用订单号 pay_dict['sign_type'] = str(request.REQUEST['sign_type'])#应用传给订单核实接口的参数 pay_dict['sign_return'] = str(request.REQUEST['sign_return'])#应用传给订单核实接口的参数sign_type pay_dict['client_id'] = settings.APP_KEY_360#应用app key pay_dict['client_secret'] = settings.APP_SECRET_KEY_360#应用app_secret data = { 'rc':12, 'result':u'fail_验证失败', 'data':{'msg':get_msg('charge','fail'),'server_now':int(time.time())}, } rk_user = UserBase.get(pay_dict['app_uid']) pay_dict['gateway_flag'] = str(request.REQUEST.get('gateway_flag', '')) if pay_dict['gateway_flag'] != 'success': data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'360',\ 'result':u'fail_gateway_flag','oid':pay_dict['order_id'],\ 'item_id':pay_dict['product_id'],'price':pay_dict['amount'], 'subarea': rk_user.subarea,}) return HttpResponse('ok') pay_url = "https://openapi.360.cn/pay/verify_mobile_notification.json?app_key=%(app_key)s&product_id=%(product_id)s&amount=%(amount)s&app_uid=%(app_uid)s&order_id=%(order_id)s&app_order_id=%(app_order_id)s&sign_type=%(sign_type)s&sign_return=%(sign_return)s&client_id=%(client_id)s&client_secret=%(client_secret)s" % pay_dict try: url_request = urllib2.urlopen(pay_url, timeout=12) code, res = url_request.code, url_request.read() except: data = { 'rc':7, 'data':{ 'msg':get_msg('login','refresh'), 'server_now':int(time.time()), }, } data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'360',\ 'result':u'fail_请求超时','oid':pay_dict['order_id'],\ 'item_id':pay_dict['product_id'],'price':pay_dict['amount'],'subarea': rk_user.subarea,}) return HttpResponse('ok') oid = pay_dict["order_id"] item_id = pay_dict["product_id"] if code == 200: res_dict = json.loads(res) ret = res_dict.get('ret', '') if ret == 'verified': data = charge_api(rk_user, oid, item_id, platform = '360',res_dict={},request = request) data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'360',\ 'result':data['result'],'oid':oid,'item_id':item_id,'price':pay_dict['amount'],'subarea': rk_user.subarea,}) return HttpResponse('ok')
def _check_invite_code(rk_user,invite_code): """检查 """ uid = '' if invite_code: try: invite_code = invite_code.lower() inviter_uid = str(int(invite_code,16)) inviter = UserBase.get(inviter_uid) if inviter and inviter_uid != rk_user.uid: uid = inviter_uid except: pass return uid
def _check_invite_code(rk_user, invite_code): """检查 """ uid = "" if invite_code: try: invite_code = invite_code.lower() inviter_uid = str(int(invite_code, 16)) inviter = UserBase.get(inviter_uid) if inviter and inviter_uid != rk_user.uid: uid = inviter_uid except: pass return uid
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 charge_result_pp(request): """ pp获得玩家的充值行为后,用此api通知我们 第一步 验证pp 的请求参数 第二步 给玩家充值 """ status = int(request.REQUEST['status']) #已经兑现过了 if status == 1: return HttpResponse('success') #订单验证失败 sign = request.REQUEST['sign'] rc, pp_sign = decode_pp_callback(sign) if rc or pp_sign == {}: return HttpResponse('fail') #订单是否处理过 billno = pp_sign['billno'] billno_req = request.REQUEST['billno'] if billno_req != billno: return HttpResponse('fail') #是否是正确的玩家 uid = pp_sign['roleid'] mi_record = data_log_mod.get_log_model("OrderRecord").find({'oid':billno}) if not mi_record: return HttpResponse('fail') item_id = mi_record[0].item_id oc_uid = mi_record[0].uid if oc_uid != uid: return HttpResponse('fail') rk_user = UserBase.get(oc_uid) if not rk_user: return HttpResponse('fail') data = charge_api(rk_user, billno, item_id, platform = 'pp',res_dict={},request = request, charge_way='pp') data_log_mod.set_log('ChargeResultLog', rk_user, **{'charge_way':'pp', 'result':data['result'],'oid':billno,'item_id':item_id}) if data['rc'] != 0: return HttpResponse('fail') return HttpResponse('success')
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 login(self, params): """登录 发送登录奖励邮件 """ user_base_obj = self.user_base user_property_obj = self.user_property # game_config = self.game_config # 获取当天的字符串 now = datetime.datetime.now() # 获取注册时间 add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date() # 获取双倍充值的时间 # charge_double_date = game_config.shop_config.get('charge_double_date', '') mail_awards = {} now_str = utils.datetime_toString(now) self.login_info.setdefault('login_record_new', []).insert(0, now_str) if len(self.login_info['login_record_new']) > 5: self.login_info['login_record_new'].pop() last_login_time = self.login_info['login_time'] # 新安装用户,或玩家每天首次登入 if not last_login_time or now.date() != utils.timestamp_toDatetime( last_login_time).date(): self.login_info['total_login_num'] += 1 self.login_info['login_record'].insert(0, str(now.date())) # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug if len(self.login_info['login_record']) > 40: self.login_info['login_record'].pop() # 连续登录 if now.date() == (utils.timestamp_toDatetime(last_login_time) + datetime.timedelta(days=1)).date(): self.login_info['continuous_login_num'] += 1 # 非连续登录 else: self.login_info['continuous_login_num'] = 1 # 每日登录奖励 # mail_awards.update(self.get_daily_login_award()) # # 判断有无系统奖励 # mail_awards.update(self.get_system_bonus()) #临时的一个系统补偿 mail_awards.update(self.get_system_compensates()) # #临时补偿 # mail_awards.update(self.get_temp_bonus()) # # 特定日期首次充值双倍再开放 # if not user_property_obj.double_charge and ( # str(add_date) != str(now.date()) and # str(now.date()) == charge_double_date): # user_property_obj.property_info['double_charge'] = True # # 特定日期之后已充值过的用户首次充值双倍关闭 # if user_property_obj.double_charge and charge_double_date and ( # str(now.date()) > charge_double_date): # user_property_obj.property_info['double_charge'] = False user_gift_obj = UserGift.get_instance(self.uid) # #连续登录奖励 # mail_awards.update(self.get_continuous_login_award()) # #累积登录奖励 # mail_awards.update(self.get_login_award()) # 领取以前未领取的等级奖励 user_gift_obj.get_lv_gift() # 月卡返还 mail_awards.update(self.get_monthCard_bonus()) # if str(add_date) != str(now.date()): # self.__refresh_month_card_info(user_property_obj) # 重置道具商店购买次数 self.user_pack.reset_store_has_bought_cnt() # vip 玩家 每日奖励 通过邮件发放 mail_awards.update(self.get_vip_daily_bonus()) # 回复战场次数重置 user_property_obj.reset_recover_times() # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导 if user_property_obj.property_info.get( 'newbie_steps', 0) == 15 and user_property_obj.newbie: user_property_obj.user_cards.reset_cards() rtn_data = {} user_property_obj.property_info['login_time'] = int(time.time()) #版本更新奖励 strVersion = params.get("version", "") if last_login_time and strVersion != "": update_version_award = self.get_update_version_bonus(strVersion) if update_version_award and strVersion not in user_property_obj.update_award: mail_awards["update_version_award"] = { "award": update_version_award } #user_property_obj.give_award(update_version_award) user_property_obj.property_info["update_award"].append( strVersion) #判断有无绑定奖励 if UserBase.get(self.uid).platform != 'oc' and \ user_property_obj.property_info.get('bind_award'): mail_awards['bind_award'] = self.game_config.weibo_config[ 'bind_award'] user_property_obj.property_info['bind_award'] = False # if not user_property_obj.newbie: # rtn_data = self.new_login_bonus(now, user_property_obj) # 根据上一次22:00的pvp排名给予相应的功勋奖励 mail_awards.update(self.get_honor_award()) # 发得奖邮件 self.send_mails(mail_awards) #当天注册用户判断是否有活动双倍 # if not self.login_info.get('set_newbie_double_charge',False) and\ # not user_property_obj.double_charge and\ # str(now.date()) == charge_double_date and\ # str(add_date) == str(now.date()): # user_property_obj.property_info['double_charge'] = True # self.login_info['set_newbie_double_charge'] = True # 若保底求将没开 清空保底求将元宝 from apps.logics.gacha import is_open_safty self.user_gacha.reset_cost_coin() if not is_open_safty(): self.user_gacha.reset_cost_coin() # 登录时间更新 self.login_info['login_time'] = int(time.time()) self.put() user_property_obj.put() return {}
def mi_sync_report(request): """ mi获得玩家的充值行为后,用此api通知我们 第一步 验证mi 的请求参数 第二步 主动查询 mi,进一步确认订单状态 第三步 给玩家充值 """ request_data = dict( appId = request.REQUEST.get('appId', None), cpOrderId = request.REQUEST.get('cpOrderId', None), cpUserInfo = request.REQUEST.get('cpUserInfo', None), uid = request.REQUEST.get('uid', None), orderId = request.REQUEST.get('orderId', None), orderStatus = request.REQUEST.get('orderStatus', None), payFee = request.REQUEST.get('payFee', None), productCode = request.REQUEST.get('productCode', None), productName = request.REQUEST.get('productName', None), productCount = request.REQUEST.get('productCount', None), payTime = request.REQUEST.get('payTime', None), orderConsumeType = request.REQUEST.get('orderConsumeType', None), signature = request.REQUEST.get('signature', None), ) #### 验证mi 的传参 # errcode 含义 # 状态码,200 成功 # 1506 cpOrderId 错误 # 1515 appId 错误 # 1516 uid 错误 (mi 的uid) # 1525 signature 错误 # 3515 订单信息 不一致,用于和 CP 的订单校验 #3502 订单处理超时 #1511 支付结果错误 errcode = {'errcode': 200} if request_data['appId'] != settings.MI_APP_ID: errcode['errcode'] = 1515 return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) signature_params = sorted([key for key in request_data.keys() if request_data[key] and key != 'signature']) ready_signature = "&".join(['{}={}'.format(key, request_data[key].encode('utf-8')) for key in signature_params]) if request_data['signature'] != hmac.new(settings.MI_SECRET_KEY, ready_signature, hashlib.sha1).hexdigest(): errcode['errcode'] = 1525 return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) oid = request_data['cpOrderId'] mi_record = OrderRecord.find({'oid':oid}) if not mi_record: errcode['errcode'] = 1506 return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) item_id = mi_record[0].item_id oc_uid = mi_record[0].uid #### 我们 主动查询mi的订单支付状态接口 加强验证 mi_url = "http://mis.migc.xiaomi.com/api/biz/service/queryOrder.do" ready_signature = 'appId=%s&cpOrderId=%s&uid=%s' % (settings.MI_APP_ID, oid, request_data['uid']) signature = hmac.new(settings.MI_SECRET_KEY, ready_signature, hashlib.sha1).hexdigest() confirm_data = dict( appId = settings.MI_APP_ID, cpOrderId = oid, uid = request_data['uid'], signature = signature, ) pairs = urllib.urlencode(confirm_data) fullurl = mi_url + '?' + pairs url_request = urllib2.urlopen(fullurl, timeout=12) code, res = url_request.code, url_request.read() res_dict = json.loads(res) rk_user = UserBase.get(oc_uid) if not rk_user: errcode['errcode'] = 1506 return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) if code != 200: errcode['errcode'] = 3502 data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\ 'result': u'订单处理超时' + str(code),'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,}) return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) if 'errcode' in res_dict: errcode['errcode'] = res_dict['errcode'] data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\ 'result': u'小米验证支付状态不通过' + errcode['errcode'],'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,}) return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) if res_dict['cpOrderId'] != oid or res_dict['orderStatus'] != 'TRADE_SUCCESS': errcode['errcode'] = 1511 data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\ 'result': u'小米返回:支付结果错误'+ res_dict['orderStatus'],'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,}) return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) # 和前端约定cpUserInfo 存的是 item_id if item_id != res_dict['cpUserInfo']: errcode['errcode'] = 3515 data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\ 'result': u'物品不一致','oid':oid,'item_id':item_id,'subarea': rk_user.subarea,}) return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) ### 给玩家充值 data = charge_api(rk_user, oid, item_id, platform = 'mi',res_dict={},request = request, charge_way='mi') data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\ 'result':data['result'],'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,}) if data['result'] == u'fail_订单重复': errcode['errcode'] = 2004 elif data['rc'] != 0: errcode['errcode'] = 1506 return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', )
def test_recover_bug(): ''' 10-24 ''' userbase = UserBase.get(uid) print userbase.wrapper_info()
def show_baseinfo(): userbase = UserBase.get(uid) pprint (userbase.baseinfo) print len(userbase.baseinfo['received_mails'])
def user_base(self): if not hasattr(self, '_user_base'): from apps.models.user_base import UserBase self._user_base = UserBase.get(self.uid) return self._user_base
def login(self, params): """登录 发送登录奖励邮件 """ user_base_obj = self.user_base user_property_obj = self.user_property # game_config = self.game_config # 获取当天的字符串 now = datetime.datetime.now() # 获取注册时间 add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date() # 获取双倍充值的时间 # charge_double_date = game_config.shop_config.get('charge_double_date', '') mail_awards = {} now_str = utils.datetime_toString(now) self.login_info.setdefault('login_record_new', []).insert(0, now_str) if len(self.login_info['login_record_new']) > 5: self.login_info['login_record_new'].pop() last_login_time = self.login_info['login_time'] # 新安装用户,或玩家每天首次登入 if not last_login_time or now.date() != utils.timestamp_toDatetime(last_login_time).date(): self.login_info['total_login_num'] += 1 self.login_info['login_record'].insert(0, str(now.date())) # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug if len(self.login_info['login_record']) > 40: self.login_info['login_record'].pop() # 连续登录 if now.date() == (utils.timestamp_toDatetime(last_login_time) + datetime.timedelta(days=1)).date(): self.login_info['continuous_login_num'] += 1 # 非连续登录 else: self.login_info['continuous_login_num'] = 1 # 每日登录奖励 # mail_awards.update(self.get_daily_login_award()) # # 判断有无系统奖励 # mail_awards.update(self.get_system_bonus()) #临时的一个系统补偿 mail_awards.update(self.get_system_compensates()) # #临时补偿 # mail_awards.update(self.get_temp_bonus()) # # 特定日期首次充值双倍再开放 # if not user_property_obj.double_charge and ( # str(add_date) != str(now.date()) and # str(now.date()) == charge_double_date): # user_property_obj.property_info['double_charge'] = True # # 特定日期之后已充值过的用户首次充值双倍关闭 # if user_property_obj.double_charge and charge_double_date and ( # str(now.date()) > charge_double_date): # user_property_obj.property_info['double_charge'] = False user_gift_obj = UserGift.get_instance(self.uid) # #连续登录奖励 # mail_awards.update(self.get_continuous_login_award()) # #累积登录奖励 # mail_awards.update(self.get_login_award()) # 领取以前未领取的等级奖励 user_gift_obj.get_lv_gift() # 月卡返还 mail_awards.update(self.get_monthCard_bonus()) # if str(add_date) != str(now.date()): # self.__refresh_month_card_info(user_property_obj) # 重置道具商店购买次数 self.user_pack.reset_store_has_bought_cnt() # vip 玩家 每日奖励 通过邮件发放 mail_awards.update(self.get_vip_daily_bonus()) # 回复战场次数重置 user_property_obj.reset_recover_times() # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导 if user_property_obj.property_info.get('newbie_steps', 0) == 15 and user_property_obj.newbie: user_property_obj.user_cards.reset_cards() rtn_data = {} user_property_obj.property_info['login_time'] = int(time.time()) #版本更新奖励 strVersion = params.get("version", "") if last_login_time and strVersion != "": update_version_award = self.get_update_version_bonus(strVersion) if update_version_award and strVersion not in user_property_obj.update_award: mail_awards["update_version_award"] = {"award":update_version_award} #user_property_obj.give_award(update_version_award) user_property_obj.property_info["update_award"].append(strVersion) #判断有无绑定奖励 if UserBase.get(self.uid).platform != 'oc' and \ user_property_obj.property_info.get('bind_award'): mail_awards['bind_award'] = self.game_config.weibo_config['bind_award'] user_property_obj.property_info['bind_award'] = False # if not user_property_obj.newbie: # rtn_data = self.new_login_bonus(now, user_property_obj) # 根据上一次22:00的pvp排名给予相应的功勋奖励 mail_awards.update(self.get_honor_award()) # 发得奖邮件 self.send_mails(mail_awards) #当天注册用户判断是否有活动双倍 # if not self.login_info.get('set_newbie_double_charge',False) and\ # not user_property_obj.double_charge and\ # str(now.date()) == charge_double_date and\ # str(add_date) == str(now.date()): # user_property_obj.property_info['double_charge'] = True # self.login_info['set_newbie_double_charge'] = True # 若保底求将没开 清空保底求将元宝 from apps.logics.gacha import is_open_safty self.user_gacha.reset_cost_coin() if not is_open_safty(): self.user_gacha.reset_cost_coin() # 登录时间更新 self.login_info['login_time'] = int(time.time()) self.put() user_property_obj.put() return {}
#-*- coding: utf-8 -*- import os import sys import random base_dir = os.path.dirname(os.path.abspath(__file__)).replace('/scripts/test', '') sys.path.insert(0, base_dir) import apps.settings as settings from django.core.management import setup_environ setup_environ(settings) from apps.oclib import app from apps.models.user_base import UserBase from apps.views.charge import charge_api uid = '56100215461' if len(sys.argv) != 2 else sys.argv[1] ub = UserBase.get(uid) print 'before_charge_coin', ub.user_property.coin print charge_api(ub, 'test'+str(random.randint(0, 100)), 'coin60', platform='test', charge_way='test', charge_money='60') print 'after_charge_coin', ub.user_property.coin app.pier.save()
import os import sys import random base_dir = os.path.dirname(os.path.abspath(__file__)).replace('/scripts/test', '') sys.path.insert(0, base_dir) import apps.settings_local as settings from django.core.management import setup_environ setup_environ(settings) from apps.oclib import app from apps.models.user_base import UserBase from apps.views.charge import charge_api uid = '0100000048' if len(sys.argv) != 2 else sys.argv[1] ub = UserBase.get(uid) def charge_test(item_id, charge_money): print 'before_charge_coin', ub.user_property.coin print charge_api(ub, 'test'+str(random.randint(0, 100)), 'monthCard300', platform='test', charge_way='test', charge_money='30') print 'after_charge_coin', ub.user_property.coin print '*'*20 + '\n' charge_test('monthCard300', '30') charge_test('coin980', '98') app.pier.save()
import apps.settings as settings from django.core.management import setup_environ setup_environ(settings) from apps.models.user_base import UserBase from apps.models.charge_record import ChargeRecord from apps.common.utils import datetime_toString import datetime oid='12999763169054705758.1301353301481849' uid='2100220172' item_id = 'com.nega.fenglinhuoshangl.coin03' item_num = 760 item_price = 68 charge_way='googleplay' rk_user = UserBase.get(uid) before_coin = rk_user.user_property.coin rk_user.user_property.property_info['coin'] += item_num after_coin = rk_user.user_property.property_info['coin'] record_data = { "oid":oid, "platform":rk_user.platform, "lv":rk_user.user_property.lv, "price":item_price, "item_id":item_id, "item_num":item_num, "createtime":datetime_toString(datetime.datetime.now()), "before_coin":before_coin, "after_coin":after_coin, "client_type":rk_user.client_type, "charge_way":charge_way,
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 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))
import json from apps.models.user_mystery_store import UserMysteryStore from apps.models.user_property import UserProperty from apps.common import utils from apps.config.game_config import game_config from apps.logics import vip from apps.models import data_log_mod from apps.models.user_cards import UserCards from apps.models.user_equips import UserEquips from apps.models.user_pack import UserPack from apps.logics import card from apps.logics import equip from apps.models.user_base import UserBase game_config.subareas_conf() game_config.set_subarea('1') rk_user = UserBase.get(uid) def check_card_in_deck(user_card_obj,card_list): """ 检查武将是否在队伍中 """ game_config.subareas_conf() game_config.set_subarea('1') for ucid in card_list: for deck in user_card_obj.decks: ucid_ls = [card['ucid'] for card in deck if card.get('ucid','')] if ucid in ucid_ls: return 11,utils.get_msg('card','in_deck') return 0,'' def equip_stove():
def charge_result_91(request): """ 91获得玩家的充值行为后,用此api通知我们 第一步 验证91 的请求参数 第二步 给玩家充值 """ request_data = dict( AppId = request.REQUEST.get('AppId', None), Act = request.REQUEST.get('Act', None), ProductName = request.REQUEST.get('ProductName', None), ConsumeStreamId = request.REQUEST.get('ConsumeStreamId', None), CooOrderSerial = request.REQUEST.get('CooOrderSerial', None), Uin = request.REQUEST.get('Uin', None), GoodsId = request.REQUEST.get('GoodsId', None), GoodsInfo = request.REQUEST.get('GoodsInfo', None), GoodsCount = request.REQUEST.get('GoodsCount', None), OriginalMoney = request.REQUEST.get('OriginalMoney', None), OrderMoney = request.REQUEST.get('OrderMoney', None), Note = request.REQUEST.get('Note', None), PayStatus = request.REQUEST.get('PayStatus', None), CreateTime = request.REQUEST.get('CreateTime', None), Sign = request.REQUEST.get('Sign', None), ) #### 验证91 的传参 # ErrorCode 含义 # 状态码,1 成功 # 0 失败 # 2 AppId无效 # 3 Act无效 # 4 参数无效 # 5 Sign错误 errcode = {'ErrorCode': 1,'ErrorDesc':u'接收成功'} if None in request_data.values(): errcode = {'ErrorCode': 4,'ErrorDesc':u'参数无效'} return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) if request_data['AppId'] != settings.APP_ID_91: errcode['ErrorCode'] = 2 errcode['ErrorDesc'] = u'AppId无效' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) if request_data['Act'] != '1': errcode['ErrorCode'] = 3 errcode['ErrorDesc'] = u'Act无效' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) if request_data['PayStatus'] != '1': errcode['ErrorCode'] = 0 errcode['ErrorDesc'] = u'接收失败' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) signature_params = u"{0}{1}{2}{3}{4}{5}{6}{7}{8}{9:.2f}{10:.2f}{11}{12}{13}{14}".format(\ request_data['AppId'],request_data['Act'],request_data['ProductName'],request_data['ConsumeStreamId'],\ request_data['CooOrderSerial'],request_data['Uin'],request_data['GoodsId'],request_data['GoodsInfo'],\ request_data['GoodsCount'],float(request_data['OriginalMoney']),float(request_data['OrderMoney']),\ request_data['Note'],request_data['PayStatus'],request_data['CreateTime'],settings.APP_KEY_91) signature = md5.new(signature_params.encode('utf-8')).hexdigest() if request_data['Sign'] != signature: errcode['ErrorCode'] = 5 errcode['ErrorDesc'] = u'Sign无效' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) oid = request_data['CooOrderSerial'] pid = md5.md5('91'+str(request_data['Uin'])).hexdigest() acc_obj = AccountMapping.get(pid) if not acc_obj: errcode['ErrorCode'] = 0 errcode['ErrorDesc'] = u'接收失败' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) oc_uid = acc_obj.uid item_id = request_data['GoodsId'] mi_record = OrderRecord.find({'oid':oid}) if not mi_record: errcode['ErrorCode'] = 0 errcode['ErrorDesc'] = u'接收失败' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) get_item_id = mi_record[0].item_id get_oc_uid = mi_record[0].uid if get_item_id != item_id or oc_uid != get_oc_uid: errcode['ErrorCode'] = 0 errcode['ErrorDesc'] = u'接收失败' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', ) rk_user = UserBase.get(oc_uid) ### 给玩家充值 OrderMoney = float(request_data['OrderMoney']) data = charge_api(rk_user, oid, item_id, platform = '91',res_dict={},request = request, charge_way='91',charge_money=OrderMoney) data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'91',\ 'result':data['result'],'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,}) if data['rc'] != 0: errcode['ErrorCode'] = 0 errcode['ErrorDesc'] = u'接收失败' return HttpResponse( json.dumps(errcode, indent=1), content_type='application/x-javascript', )