Esempio n. 1
0
 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
Esempio n. 2
0
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))
Esempio n. 3
0
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')
Esempio n. 4
0
 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