Пример #1
0
def _fix_user_task_unit(self, user_task_unit, timestamp):
    from poker.entity.dao import sessiondata
    clientId = sessiondata.getClientId(user_task_unit.userId)
    
    # 所有任务池的检查过期条件是一样的
    task_pool_0 = user_task_unit.taskUnit.poolList[0]
    if task_pool_0.visible_cond and \
            not task_pool_0.visible_cond.check(self.gameId, user_task_unit.userId, clientId, timestamp):
        ftlog.debug('task pool not match visible cond, return...')
        return TYUserTaskUnit(user_task_unit.userId, user_task_unit.taskUnit)
    
    tasklist = user_task_unit.taskList
    if tasklist:
        for task in tasklist:
            if not task.gotReward:
                return user_task_unit  # 还有任务没领奖

    
    for task_pool in user_task_unit.taskUnit.poolList:
        assert isinstance(task_pool, HallTaskKindPoolWithCond)
        # 检查接取条件
        if task_pool.accepted_cond and not task_pool.accepted_cond.check(self.gameId, user_task_unit.userId, clientId, timestamp):
            ftlog.debug('can not accept this task pool, continue...')
            continue

        # 接新任务
        task_kind = task_pool.nextTaskKind(task_order=len(tasklist))
        if task_kind:
            task = task_kind.newTask(None, timestamp)
            user_task_unit.addTask(task)
            ftlog.debug('find task pool, break...')
            break
        
    return user_task_unit
Пример #2
0
    def _fix_user_task_unit(self, user_task_unit, timestamp):
        task_pool = user_task_unit.taskUnit.poolList[0]
        assert isinstance(task_pool, HallTaskKindPoolWithCond)
        # 检查过期条件
        if task_pool.visible_cond and \
                not task_pool.visible_cond.check(self.gameId, user_task_unit.userId, None, timestamp):
            return TYUserTaskUnit(user_task_unit.userId,
                                  user_task_unit.taskUnit)
        tasklist = user_task_unit.taskList
        if tasklist:
            for task in tasklist:
                if not task.gotReward:
                    return user_task_unit  # 还有任务没领奖
        else:  # 身上没任务
            # 检查接取条件
            if task_pool.accepted_cond and not task_pool.accepted_cond.check(
                    self.gameId, user_task_unit.userId, None, timestamp):
                return user_task_unit

        # 接新任务
        task_kind = task_pool.nextTaskKind(task_order=len(tasklist))
        if task_kind:
            task = task_kind.newTask(None, timestamp)
            user_task_unit.addTask(task)
        return user_task_unit
Пример #3
0
    def _fix_user_task_unit(self, user_task_unit, timestamp):
        tasklist = user_task_unit.taskList
        if not tasklist:  # 身上没任务,接第1个pool
            for task_pool in self.taskUnit.poolList:
                task_kind = self._taskpool_get_first(task_pool,
                                                     user_task_unit.userId,
                                                     timestamp)
                if not task_kind:
                    continue
                task = task_kind.newTask(None, timestamp)
                user_task_unit.addTask(task)
                break
            return user_task_unit

        task_pool = tasklist[0].taskKind.taskKindPool
        # 如果当前pool过期,找下一个pool;否则看当前pool的任务完成情况
        is_expire = self._taskpool_expire(task_pool, user_task_unit.userId,
                                          timestamp)
        if not is_expire:
            for task in tasklist:
                if not task.gotReward:
                    return user_task_unit  # 还有任务没领奖,do nothing

            # 还有后继任务,那么接取;否则找下一个pool
            task_kind = task_pool.nextTaskKind(task_order=len(tasklist))
            if task_kind:
                task = task_kind.newTask(None, timestamp)
                user_task_unit.addTask(task)
                return user_task_unit

        # 找下一个pool
        for task_pool in self.taskUnit.poolList[task_pool.index + 1:]:
            task_kind = self._taskpool_get_first(task_pool,
                                                 user_task_unit.userId,
                                                 timestamp)
            if not task_kind:
                continue
            # 同时只能存在一个pool,先删除身上任务
            user_task_unit.removeAllTask()
            task = task_kind.newTask(None, timestamp)
            user_task_unit.addTask(task)
            return user_task_unit

        # 没能找到下一个pool
        return TYUserTaskUnit(
            user_task_unit.userId,
            user_task_unit.taskUnit) if is_expire else user_task_unit
Пример #4
0
    def loadTaskModel(self, userId, timestamp, clientId=None):
        ftlog.debug('HallChargeSubTaskSystem.loadTaskModel...')
        template_name = configure.getVcTemplate('hall_tasks', clientId)
        template = _templates.get(template_name)
        if not template:
            return None

        task_unitid = template.get(self.TYPE_ID)
        ftlog.debug('template_name:', template_name, ' template:', template,
                    ' task_unitid:', task_unitid)

        if not task_unitid:
            return None

        # 玩家身上只能有一个本类型的taskunit
        task_units = self._taskUnit.values()
        user_task_units = task_units[0].taskSystem.loadUserTaskUnits(
            userId, task_units, timestamp)
        user_task_units = [temp for temp in user_task_units if temp.taskMap]
        ftlog.debug('task_units:', task_units, ' user_task_units:',
                    user_task_units)

        if user_task_units:
            user_task_unit = user_task_units[0]
            if user_task_unit.taskUnitId != task_unitid:
                return None  # 已结取任务,且跟当前模板不一致,那么不显示
        else:
            user_task_unit = TYUserTaskUnit(userId,
                                            self._taskUnit.get(task_unitid))

        ftlog.debug('user_task_unit:', user_task_unit)
        user_task_unit = self._fix_user_task_unit(user_task_unit, timestamp)

        ftlog.debug('after _fix_user_task_unit user_task_unit:',
                    user_task_unit)
        if not self.userCanSeeTaskUnit(user_task_unit, timestamp):
            # 有充值任务,但不可见
            return None

        return self._loadTaskModel(user_task_unit, timestamp)
Пример #5
0
 def loadTaskModel(self, userId, timestamp, clientId=None):
     template_name = configure.getVcTemplate('hall_tasks', clientId)
     template = _templates.get(template_name)
     if not template:
         return None
     task_unitid = template.get(self.TYPE_ID)
     if not task_unitid:
         return None
     # 玩家身上只能有一个本类型的taskunit
     task_units = self._taskUnit.values()
     user_task_units = task_units[0].taskSystem.loadUserTaskUnits(
         userId, task_units, timestamp)
     user_task_units = [temp for temp in user_task_units if temp.taskMap]
     if user_task_units:
         user_task_unit = user_task_units[0]
         if user_task_unit.taskUnitId != task_unitid:
             return None  # 已结取任务,且跟当前模板不一致,那么不显示
     else:
         user_task_unit = TYUserTaskUnit(userId,
                                         self._taskUnit.get(task_unitid))
     user_task_unit = self._fix_user_task_unit(user_task_unit, timestamp)
     return self._loadTaskModel(user_task_unit, timestamp)