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
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
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
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)
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)