def load_player(self, userID, entityID, clientVersion='', featureCode='', clientIP=''): player = self.get_player(entityID) if player: return player user = User.get(userID) # 校验entityID if not user or entityID not in user.roles.get(settings.REGION['ID']): logger.error('player crossed failed %d', entityID) return player = Player.load(entityID) if not player: return player.userID = user.userID player.username = user.username player.username_alias = user.username_alias or '' player.channel = user.channel or '' self.set_player(player) if not player.lastlogin: create_player(player) player.totallogin = 1 # 累计登陆 player.seriallogin = 1 # 连续登陆 player.clientVersion = clientVersion player.featureCode = featureCode player.clientIP = clientIP from common.log import role_register role_register.info(player=player) else: player.load_mails() today = datedate.today() if player.lastlogin.date() != today: # 当日重复不计算累计连续登陆 if player.lastlogin.date() < (datedate.today() - timedelta(days=1)): # 昨天没登陆 player.seriallogin = 1 else: player.seriallogin += 1 player.totallogin += 1 # 月卡减去每天登录的天数 if player.monthly_card_30: delta = today - player.lastlogin.date() player.monthly_card_30 = max(player.monthly_card_30 - delta.days + 1, 0) # {{ 新月卡 if player.monthcard1: delta = today - player.lastlogin.date() player.monthcard1 = max(player.monthcard1 - delta.days + 1, 0) if player.monthcard2: delta = today - player.lastlogin.date() player.monthcard2 = max(player.monthcard2 - delta.days + 1, 0) if player.weekscard1: delta = today - player.lastlogin.date() player.weekscard1 = max(player.weekscard1 - delta.days + 1, 0) if player.weekscard2: delta = today - player.lastlogin.date() player.weekscard2 = max(player.weekscard2 - delta.days + 1, 0) # }} player.daily_first_login = True now = int(time.time()) player.lastlogin = datetime.fromtimestamp(now) player.save() return player
def player(key): from entity.manager import g_entityManager from player.model import Player from pet.model import Pet player = g_entityManager.get_player(int(key)) is_online = True if not player: player = Player.load(int(key)) is_online = False rows = [] for a in Player.fields_list: attr = getdisplayattr(player, a.name) if not is_online and a.name == 'pets': names = [] for petID in player.petset: pet = Pet.simple_load(petID, ['name']) names.append(pet.name) attr = ','.join(names) if not isinstance(attr, (basestring, int, long, float)): continue ll = [a.description.decode('utf-8'), attr] rows.append(ll) return json.dumps(dict(attributes=rows, is_online=is_online))
import settings settings.watch() from common import ConfigFiles from config.configs import get_registereds from yy.config.fields import ValidationError config_files = ConfigFiles(settings.REGION['ID']) try: config_files.load_configs(get_registereds(), settings.CONFIG_FILE_PATH) except ValidationError as e: print e.message.encode("utf-8") raise e from player.model import Player p = Player.load(11) print p.name from task.manager import on_end_fb_count, on_levelup import timeit import cProfile timeit.main( ['-s', 'from __main__ import on_levelup, p', '-n', '1', 'on_levelup(p)']) cProfile.run('for i in xrange(1):on_levelup(p)', sort='time') #timeit.main(['-s', 'from __main__ import on_end_fb_count, p', # '-n', '1000', 'on_end_fb_count(p, 100111)']) # #cProfile.run('for i in xrange(1000):on_end_fb_count(p, 100111)', # sort='time')
def load_player( self, userID, entityID, clientVersion='', featureCode='', clientIP=''): from reward.manager import givegoldmail player = self.get_player(entityID) if player: return player user = User.get(userID) # 校验entityID if not user or entityID not in user.roles.get(settings.REGION['ID']): logger.error('player crossed failed %d', entityID) return player = Player.load(entityID) player.userID = user.userID player.username = user.username player.username_alias = user.username_alias or '' player.channel = user.channel or '' if not player: return self.set_player(player) if not player.lastlogin: create_player(player) player.totallogin = 1 # 累计登陆 player.seriallogin = 1 # 连续登陆 givegoldmail(player) player.clientVersion = clientVersion player.featureCode = featureCode player.clientIP = clientIP from common.log import role_register role_register.info(player=player) if not user.back_reward_received: data = get_player_reward() try: gold, credits = data[user.username] except KeyError: pass else: from mail.manager import send_mail send_mail( player.entityID, u'老训练师钻石大礼', u' 亲爱的训练师,您好!这是您在《神奇小精灵》充值所获得钻石的返还,请查收!', addition={'gold': gold}) player.credits = credits user.back_reward_received = True user.save() else: player.load_pets() player.load_equips() player.load_mails() player.load_faction() player.load_group() player.load_offline_attrs() # player.load_offline_mail() today = datedate.today() if player.lastlogin.date() != today: # 当日重复不计算累计连续登陆 # 永久商店还没开启的情况下每天都要清空玩家身上商品信息 # 目的是临时商店开启时第一次有效地刷新商品信息 clean_yesterday_daily_taskrewards(player) # 策划要求,隔天的任务奖励全部清空 if player.lastlogin.date() < ( datedate.today() - timedelta( days=1)): # 昨天没登陆 player.seriallogin = 1 if player.guide_end_signal: player.seriallogin_after_guide = 1 else: player.seriallogin += 1 if player.guide_end_signal: player.seriallogin_after_guide += 1 player.totallogin += 1 if player.guide_end_signal: player.totallogin_after_guide += 1 player.get_serialloginreward = 0 # 月卡减去每天登录的天数 if player.monthly_card_30: delta = today - player.lastlogin.date() player.monthly_card_30 = max( player.monthly_card_30 - delta.days + 1, 0) # {{ 新月卡 if player.monthcard1: delta = today - player.lastlogin.date() player.monthcard1 = max( player.monthcard1 - delta.days + 1, 0) if player.monthcard2: delta = today - player.lastlogin.date() player.monthcard2 = max( player.monthcard2 - delta.days + 1, 0) if player.weekscard1: delta = today - player.lastlogin.date() player.weekscard1 = max( player.weekscard1 - delta.days + 1, 0) if player.weekscard2: delta = today - player.lastlogin.date() player.weekscard2 = max( player.weekscard2 - delta.days + 1, 0) # }} # build_loginreward_set(player) givegoldmail(player) # 控制日冒险礼包 if player.trigger_packs_flag: player.trigger_packs_flag = getattr( settings, "TRIGGER_PACKS_FLAG", True) from pvp.rank import g_rankManager g_rankManager.check_mail(player) g_rankManager.reset_rank(player) from pvp.swap import g_swapManager g_swapManager.give_rewards(player) from campaign.manager import g_campaignManager g_campaignManager.reset(player) from pvp.daily import g_dailyManager g_dailyManager.reset(player) from faction.city import g_cityDungeon g_cityDungeon.reset_player(player, all=True) from faction.city import g_cityContend g_cityContend.reset_player(player, all=True) from campaign.manager import reset_check_in_monthly reset_check_in_monthly(player) from pvp.rob import check_rob, resize_rob_history_by_time check_rob(player) from pvp.loot import check_loot check_loot(player) resize_rob_history_by_time(player) from campaign.manager import start_count_down start_count_down(player) from mall.manager import reset_vip_packs reset_vip_packs(player) from mall.manager import first_recharge_patch first_recharge_patch(player) from campaign.manager import reset_fund reset_fund(player) from explore.dlc import g_dlcCampaignManager g_dlcCampaignManager.reset_task(player) from group.manager import give_reward_by_mail give_reward_by_mail(player) from explore.boss import give_reward give_reward(player) from world.service import give_goods configs = get_config(RechargeConfig) # from task.manager import patch_noob_tasks # patch_noob_tasks(player) # patch_guide_fb(player) for g, amount in player.offline_recharges or []: config = configs.get(g) if config: give_goods(player, config, amount=amount) player.offline_recharges = [] from explore.ambition import reload_ambition reload_ambition(player) from explore.ambition import reload_vip_ambition reload_vip_ambition(player) from task.manager import on_monthly_card on_monthly_card(player) from task.manager import on_vip_level on_vip_level(player) from task.manager import on_login on_login(player) from task.manager import on_vip_level on_vip_level(player) from task.manager import on_levelup on_levelup(player) from task.manager import on_dlc_score on_dlc_score(player) from task.manager import on_friends_count on_friends_count(player) from campaign.manager import reset_online_packs reset_online_packs(player, refresh=True) from campaign.manager import reset_consume_campaign reset_consume_campaign(player) from campaign.manager import reset_login_campaign reset_login_campaign(player) from mail.manager import apply_condition_mail apply_condition_mail(player) from campaign.manager import do_login_campaign do_login_campaign(player) from campaign.manager import reset_recharges reset_recharges(player) check_power_packs(player) player.daily_first_login = True now = int(time.time()) player.lastlogin = datetime.fromtimestamp(now) # 推荐好友 from friend.manager import recommendp recommendp(player) if player.first_recharge_flag: player.first_recharge_flag = getattr( settings, "PAY", True) # 触发power计算, 更新indexing if not user.back_level_reward_received: data = get_player_level_reward() try: level, gold = data[user.username] except KeyError: pass else: from mail.manager import send_mail send_mail( player.entityID, u'老训练师等级返利', u'亲爱的训练师: 您在旧版《神奇小精灵》1月17日之前,达到[colorF:246;255;0]%d级[colorF:255;255;255],向您奉上[colorF:246;255;0]钻石*%d[colorF:255;255;255]。祝您游戏愉快~' % (level, gold), addition={'gold': gold}) user.back_level_reward_received = True user.save() # update seed state from campaign.manager import g_campaignManager if g_campaignManager.seed_campaign.is_open(): g_campaignManager.seed_campaign.updateSeedState(player) # player.update_power() player.save() return player