Esempio n. 1
0
    def do_get_task_reward(self, gameId, userId, clientId, taskid):
        curtime = pktimestamp.getCurrentTimestamp()
        task_kind = halltask._taskSystem.findTaskKind(taskid)
        if not task_kind:
            return 
        subsys = task_kind.taskUnit.subTaskSystem
        if not isinstance(subsys, (HallNewUserSubTaskSystem, HallChargeSubTaskSystem)):  # 目前只有这俩走这里
            return

        try:
            taskmodel = subsys.loadTaskModel(userId, curtime, clientId)
            if not taskmodel:
                raise TYTaskException(-1, "未知的任务:%s" % taskid)
            task = taskmodel.userTaskUnit.findTask(taskid)
            if not task:
                raise TYTaskException(-2, "未知的任务:%s" % taskid)
            asset_list = subsys.getTaskReward(task, curtime, 'FREE_TASK', taskid)
            router.sendToUser(self._build_task_info(gameId, userId, clientId), userId)

            rewardstr = TYAssetUtils.buildContentsString(asset_list)
            mo = MsgPack()
            mo.setCmd('game')
            mo.setResult('action', 'get_task_reward')
            mo.setResult('code', 0)
            mo.setResult('info', '恭喜您获得了%s' % rewardstr)
            router.sendToUser(mo, userId)
        except TYTaskException, e:
            mo = MsgPack()
            mo.setCmd('game')
            mo.setResult('action', 'get_task_reward')
            mo.setResult('code', e.errorCode)
            mo.setResult('info', e.message)
            router.sendToUser(mo, userId)
Esempio n. 2
0
def sendReward(userId, rewardConf, mailstr, eventId, eventParam):
    """
    通用发货
    param: rewardConf 奖励配置
    格式:
    {
        'typeId': 'FixedContent',
        'items': [{'itemId': 'user:chip', 'count': 100}]
    }
    param: mailstr 邮件内容文本字符串,其中包含子串\\${rewardContent}
    eventId: 哪个事件触发的
    eventParam: 事件参数 
    return: list<(TYAssetKind, consumeCount, final)>
    """
    rewardContent = TYContentRegister.decodeFromDict(rewardConf)
    userAssets = hallitem.itemSystem.loadUserAssets(userId)
    assetList = userAssets.sendContent(DIZHU_GAMEID, rewardContent, 1, True,
                                       pktimestamp.getCurrentTimestamp(),
                                       eventId, eventParam)
    changeNames = TYAssetUtils.getChangeDataNames(assetList)
    contents = TYAssetUtils.buildContentsString(assetList)
    if mailstr:
        mailstr = strutil.replaceParams(mailstr, {'rewardContent': contents})
        message.send(DIZHU_GAMEID, message.MESSAGE_TYPE_SYSTEM, userId,
                     mailstr)
        changeNames.add('message')
    datachangenotify.sendDataChangeNotify(DIZHU_GAMEID, userId, changeNames)
    return assetList
Esempio n. 3
0
    def do_get_task_reward(self, gameId, userId, clientId, taskid):
        curtime = pktimestamp.getCurrentTimestamp()
        task_kind = halltask._taskSystem.findTaskKind(taskid)
        if not task_kind:
            return
        subsys = task_kind.taskUnit.subTaskSystem
        if not isinstance(subsys, (HallNewUserSubTaskSystem, HallChargeSubTaskSystem)):  # 目前只有这俩走这里
            return

        try:
            taskmodel = subsys.loadTaskModel(userId, curtime, clientId)
            if not taskmodel:
                raise TYTaskException(-1, "未知的任务:%s" % taskid)
            task = taskmodel.userTaskUnit.findTask(taskid)
            if not task:
                raise TYTaskException(-2, "未知的任务:%s" % taskid)
            asset_list = subsys.getTaskReward(task, curtime, 'FREE_TASK', taskid)
            router.sendToUser(self._build_task_info(gameId, userId, clientId), userId)

            rewardstr = TYAssetUtils.buildContentsString(asset_list)
            mo = MsgPack()
            mo.setCmd('game')
            mo.setResult('action', 'get_task_reward')
            mo.setResult('code', 0)
            mo.setResult('info', '恭喜您获得了%s' % rewardstr)
            router.sendToUser(mo, userId)
        except TYTaskException, e:
            mo = MsgPack()
            mo.setCmd('game')
            mo.setResult('action', 'get_task_reward')
            mo.setResult('code', e.errorCode)
            mo.setResult('info', e.message)
            router.sendToUser(mo, userId)
Esempio n. 4
0
    def _exchange(self, gameid, userid, actkey, exchangeid):
        info = self._exchanges.get(exchangeid)
        if not info:
            return {'result': 'fail', 'tip': "unknown productId"}

        buynum = self.get_exchange_buynum(userid, actkey, info)
        if buynum >= info['limitTimes']:
            return {'result': 'fail', 'tip': '兑换次数已满'}

        if not self.alter_user_credit(userid, actkey, -info['price']):
            return {'result': 'fail', 'tip': '您的积分不足'}
        daobase.executeUserCmd(userid, 'HINCRBY', actkey, self.FIELD_EXCHANGE_NUM.format(exchangeid), 1)

        userAssets = hallitem.itemSystem.loadUserAssets(userid)
        assetList = userAssets.sendContent(gameid, info['content'], 1, True,
                                           timestamp.getCurrentTimestamp(), "ACTIVITY_CREDIT_EXCHANGE", exchangeid)
        response = self._query(userid, actkey)
        ftlog.debug('TYActCreditExchange._exchange gameId=', gameid,
                    'userId=', userid,
                    'activityId=', self.getid(),
                    'reward=', TYAssetUtils.buildContents(assetList),
                    'buynum=', buynum + 1,
                    'credit=', response['credit'])
        changeNames = TYAssetUtils.getChangeDataNames(assetList)
        datachangenotify.sendDataChangeNotify(gameid, userid, changeNames)
        response['result'] = 'ok'
        response['tip'] = '兑换成功,您获得' + TYAssetUtils.buildContentsString(assetList)
        return response
Esempio n. 5
0
    def doGetTaskReward(self, gameId, userId, taskId):
        '''
        获取活动奖励
        '''
        try:
            timestamp = pktimestamp.getCurrentTimestamp()
            taskModel = neituiguangtask.newUserTaskSystem.loadTaskModel(userId, timestamp)
            task = taskModel.userTaskUnit.findTask(taskId)
            if not task:
                raise TYBizException(-1, '未知的任务:%s' % (taskId))
            expiresTime = self.calcTaskExpires(userId)
            if timestamp >= expiresTime:
                raise TYBizException(-1, '任务已经过期')
            if not userdata.getAttr(userId, 'bindMobile'):
                conf = neituiguang.getConf()
                TodoTaskHelper.sendTodoTask(gameId, userId, TodoTaskBindPhone(conf.pleaseBindPhone, ''))
                return
            assetList = neituiguangtask.newUserTaskSystem.getTaskReward(task, timestamp, 'PROMOTE_TASK', taskId)
            router.sendToUser(self.buildTaskInfoResponse(userId), userId)

            rewardStr = TYAssetUtils.buildContentsString(assetList)
            mo = MsgPack()
            mo.setCmd('promote_info')
            mo.setResult('action', 'get_task_reward')
            mo.setResult('code', 0)
            mo.setResult('info', '恭喜您获得了%s' % rewardStr)
            router.sendToUser(mo, userId)
        except TYBizException, e:
            router.sendToUser(self.makeErrorResponse('get_task_reward', e.errorCode, e.message), userId)
Esempio n. 6
0
    def _sendRewards(self, status, task, timestamp):
        from hall.game import TGHall

        userAssets = hallitem.itemSystem.loadUserAssets(status.userId)
        assetList = userAssets.sendContent(self.gameId,
                                           task.taskKind.rewardContent, 1,
                                           True, timestamp,
                                           'HALL_RP_TASK_REWARD', task.kindId)
        ftlog.info('RPTaskSystem._sendRewards', 'gameId=', self.gameId,
                   'userId=', status.userId, 'kindId=', task.kindId, 'assets=',
                   [(atup[0].kindId, atup[1]) for atup in assetList])
        changed = TYAssetUtils.getChangeDataNames(assetList)
        datachangenotify.sendDataChangeNotify(self.gameId, status.userId,
                                              changed)

        if task.taskKind.rewardMail:
            contents = TYAssetUtils.buildContentsString(assetList)
            mail = strutil.replaceParams(task.taskKind.rewardMail,
                                         {'rewardContent': contents})
            pkmessage.sendPrivate(HALL_GAMEID, status.userId, 0, mail)

        TGHall.getEventBus().publishEvent(
            UserRedPacketTaskRewardEvent(status.userId, HALL_GAMEID,
                                         task.taskKind, assetList))

        couponCount = TYAssetUtils.getAssetCount(assetList,
                                                 hallitem.ASSET_COUPON_KIND_ID)
        if couponCount > 0:
            TGHall.getEventBus().publishEvent(
                UserReceivedCouponEvent(
                    HALL_GAMEID, status.userId, couponCount,
                    hall_red_packet_const.RP_SOURCE_RP_TASK))
Esempio n. 7
0
    def sendRewards(self, userId, timestamp):
        if ftlog.is_debug():
            ftlog.debug('FTTableFinishRecorder.sendRewards', 'userId=', userId,
                        'rewardContent=', self.rewardContent)

        if not self.rewardContent:
            return

        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        assetList = userAssets.sendContent(DIZHU_GAMEID, self.rewardContent, 1,
                                           True, timestamp, 'ACTIVITY_REWARD',
                                           self.intActId)

        changed = None
        if assetList:
            changed = TYAssetUtils.getChangeDataNames(assetList)
        if self.mail:
            mail = strutil.replaceParams(
                self.mail,
                {'rewardContent': TYAssetUtils.buildContentsString(assetList)})
            pkmessage.sendPrivate(HALL_GAMEID, userId, 0, mail)
            if not changed:
                changed = set(['message'])
        if changed:
            datachangenotify.sendDataChangeNotify(DIZHU_GAMEID, userId,
                                                  changed)

        ftlog.info('FTTableFinishRecorder.sendRewards', 'userId=', userId,
                   'rewards=', [(at[0].kindId, at[1]) for at in assetList])
    def _exchange(self, gameid, userid, actkey, exchangeid):
        info = self._exchanges.get(exchangeid)
        if not info:
            return {'result': 'fail', 'tip': "unknown productId"}

        buynum = self.get_exchange_buynum(userid, actkey, info)
        if buynum >= info['limitTimes']:
            return {'result': 'fail', 'tip': '兑换次数已满'}

        if not self.alter_user_credit(userid, actkey, -info['price']):
            return {'result': 'fail', 'tip': '您的积分不足'}
        daobase.executeUserCmd(userid, 'HINCRBY', actkey,
                               self.FIELD_EXCHANGE_NUM.format(exchangeid), 1)

        userAssets = hallitem.itemSystem.loadUserAssets(userid)
        assetList = userAssets.sendContent(gameid, info['content'], 1, True,
                                           timestamp.getCurrentTimestamp(),
                                           "ACTIVITY_CREDIT_EXCHANGE",
                                           exchangeid)
        response = self._query(userid, actkey)
        ftlog.debug('TYActCreditExchange._exchange gameId=', gameid, 'userId=',
                    userid, 'activityId=', self.getid(), 'reward=',
                    TYAssetUtils.buildContents(assetList), 'buynum=',
                    buynum + 1, 'credit=', response['credit'])
        changeNames = TYAssetUtils.getChangeDataNames(assetList)
        datachangenotify.sendDataChangeNotify(gameid, userid, changeNames)
        response['result'] = 'ok'
        response['tip'] = '兑换成功,您获得' + TYAssetUtils.buildContentsString(
            assetList)
        return response
Esempio n. 9
0
    def doGetTaskReward(self, gameId, userId, taskId):
        '''
        获取活动奖励
        '''
        try:
            timestamp = pktimestamp.getCurrentTimestamp()
            taskModel = neituiguangtask.newUserTaskSystem.loadTaskModel(
                userId, timestamp)
            task = taskModel.userTaskUnit.findTask(taskId)
            if not task:
                raise TYBizException(-1, '未知的任务:%s' % (taskId))
            expiresTime = self.calcTaskExpires(userId)
            if timestamp >= expiresTime:
                raise TYBizException(-1, '任务已经过期')
            if not userdata.getAttr(userId, 'bindMobile'):
                conf = neituiguang.getConf()
                TodoTaskHelper.sendTodoTask(
                    gameId, userId, TodoTaskBindPhone(conf.pleaseBindPhone,
                                                      ''))
                return
            assetList = neituiguangtask.newUserTaskSystem.getTaskReward(
                task, timestamp, 'PROMOTE_TASK', taskId)
            router.sendToUser(self.buildTaskInfoResponse(userId), userId)

            rewardStr = TYAssetUtils.buildContentsString(assetList)
            mo = MsgPack()
            mo.setCmd('promote_info')
            mo.setResult('action', 'get_task_reward')
            mo.setResult('code', 0)
            mo.setResult('info', '恭喜您获得了%s' % rewardStr)
            router.sendToUser(mo, userId)
        except TYBizException, e:
            router.sendToUser(
                self.makeErrorResponse('get_task_reward', e.errorCode,
                                       e.message), userId)
Esempio n. 10
0
    def doGetPrize(self, gameId, userId, clientId):
        try:
            timestamp = pktimestamp.getCurrentTimestamp()
            status = neituiguang.loadStatus(userId, timestamp)
            if not status.isBindMobile:
                conf = neituiguang.getConf()
                TodoTaskHelper.sendTodoTask(
                    gameId, userId, TodoTaskBindPhone(conf.pleaseBindPhone,
                                                      ''))
                return
            count, assetList = neituiguang.getAllReward(status)
            if count > 0:
                conf = neituiguang.getConf()
                prizeRewardTips = strutil.replaceParams(
                    conf.prizeRewardTips, {
                        'rewardContent':
                        TYAssetUtils.buildContentsString(assetList)
                    })
                TodoTaskHelper.sendTodoTask(gameId, userId,
                                            TodoTaskGoldRain(prizeRewardTips))

                mo = self.buildQueryPrizeResponse(gameId, userId, clientId)
                router.sendToUser(mo, userId)
            else:
                TodoTaskHelper.sendTodoTask(gameId, userId,
                                            TodoTaskShowInfo('奖励已经领取', True))
            datachangenotify.sendDataChangeNotify(gameId, userId,
                                                  ['free', 'promotion_loc'])
        except TYBizException, e:
            TodoTaskHelper.sendTodoTask(gameId, userId,
                                        TodoTaskShowInfo(e.message, True))
Esempio n. 11
0
    def _exchange(self, gameid, userid, actkey, exchangeid):
        info = self._exchanges.get(exchangeid)
        if not info:
            return {'result': 'fail', 'tip': "unknown productId"}

        buynum = self.get_exchange_buynum(userid, actkey, info)
        if buynum >= info['limitTimes']:
            return {'result': 'fail', 'tip': '兑换次数已满'}

        curtime = timestamp.getCurrentTimestamp()
        userAssets = hallitem.itemSystem.loadUserAssets(userid)
        try:
            userAssets.consumeContentItemList(gameid, info['costs'], False, curtime,
                                              "ACT_ITEM_EXCHANGE_COST", exchangeid)
        except:
            return {'result': 'fail', 'tip': '您的道具不足,快去获取道具吧'}

        daobase.executeUserCmd(userid, 'HINCRBY', actkey, self.FIELD_EXCHANGE_NUM.format(exchangeid), 1)
        assetList = userAssets.sendContent(gameid, info['content'], 1, True,
                                           timestamp.getCurrentTimestamp(), "ACT_ITEM_EXCHANGE_GAIN", exchangeid)
        response = self._query(userid, actkey)
        ftlog.info('TYActItemExchange._exchange gameId=', gameid,
                   'userId=', userid,
                   'activityId=', self.getid(),
                   'reward=', TYAssetUtils.buildContents(assetList),
                   'buynum=', buynum + 1,
                   'credit=', response['credit'])
        changeNames = TYAssetUtils.getChangeDataNames(assetList)
        datachangenotify.sendDataChangeNotify(gameid, userid, changeNames)
        response['result'] = 'ok'
        response['tip'] = '兑换成功,您获得' + TYAssetUtils.buildContentsString(assetList)
        return response
Esempio n. 12
0
 def buildGotGiftDesc(self, gotVipGiftResult):
     desc = hallvip.vipSystem.getGotGiftDesc()
     if desc:
         contents = TYAssetUtils.buildContentsString(
             gotVipGiftResult.giftItemList)
         desc = strutil.replaceParams(desc, {'rewardContent': contents})
     return desc
Esempio n. 13
0
def getTableTaskReward(gameId, userId, taskId):
    timestamp = pktimestamp.getCurrentTimestamp()
    taskModel = dizhutask.tableTaskSystem.loadTaskModel(userId, timestamp)
    task = taskModel.userTaskUnit.findTask(taskId)
    if not task:
        raise TYTaskException(-1, 'Not found task: %s' % (taskId))
    assetList = dizhutask.tableTaskSystem.getTaskReward(
        task, timestamp, 'TASK_REWARD', taskId)
    return TYAssetUtils.buildContentsString(assetList)
Esempio n. 14
0
def sendRewardItems(userId, items, mail, eventId, eventParam, **kwargs):
    userAssets = hallitem.itemSystem.loadUserAssets(userId)
    assetList = userAssets.sendContentItemList(
        DIZHU_GAMEID, items, 1, True, pktimestamp.getCurrentTimestamp(),
        eventId, eventParam)
    changeNames = TYAssetUtils.getChangeDataNames(assetList)
    contents = TYAssetUtils.buildContentsString(assetList)
    if mail:
        replaceDict = {'rewardContent': contents}
        replaceDict.update(kwargs)
        mailstr = strutil.replaceParams(mail, replaceDict)
        mailstr = mailstr.replace('红包券', '元红包')
        message.send(DIZHU_GAMEID, message.MESSAGE_TYPE_SYSTEM, userId,
                     mailstr)
        changeNames.add('message')
    datachangenotify.sendDataChangeNotify(DIZHU_GAMEID, userId, changeNames)
    return assetList
Esempio n. 15
0
    def _sendRewards(self, status, task, timestamp):
        userAssets = hallitem.itemSystem.loadUserAssets(status.userId)
        assetList = userAssets.sendContent(self.gameId,
                                           task.taskKind.rewardContent, 1,
                                           True, timestamp, 'ACTIVITY_REWARD',
                                           self.intActId)
        ftlog.debug('QuweiTaskActivity._sendRewards', 'gameId=', self.gameId,
                    'actId=', self.actId, 'userId=', status.userId, 'assets=',
                    [(atup[0].kindId, atup[1]) for atup in assetList])
        changed = TYAssetUtils.getChangeDataNames(assetList)
        datachangenotify.sendDataChangeNotify(self.gameId, status.userId,
                                              changed)

        if task.taskKind.rewardMail:
            contents = TYAssetUtils.buildContentsString(assetList)
            mail = strutil.replaceParams(task.taskKind.rewardMail,
                                         {'rewardContent': contents})
            pkmessage.sendPrivate(HALL_GAMEID, status.userId, 0, mail)
Esempio n. 16
0
    def gainCheckinReward(self, gameId, userId, timestamp=None, actionType=0):
        if timestamp is None:
            timestamp = pktimestamp.getCurrentTimestamp()
        checkinOk, checkinDays = self.checkin(gameId, userId, timestamp)
        if ftlog.is_debug():
            ftlog.debug(
                'TYDailyCheckin.gainCheckinReward gameId=', gameId, 'userId=',
                userId, 'timestamp=',
                datetime.fromtimestamp(timestamp).strftime(
                    '%Y-%m-%d %H:%M:%S'), 'checkinOk=', checkinOk,
                'checkinDays=', checkinDays)

        if not checkinOk:
            return checkinOk, [], checkinDays
        # 发送奖励
        rewardContent = self.getRewardContent(checkinDays)

        ebus = TGHall.getEventBus()
        ebus.publishEvent(
            TYDailyCheckinRewardEvent(gameId, userId, rewardContent,
                                      actionType))

        if not rewardContent:
            return checkinOk, [], checkinDays

        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        assetList = userAssets.sendContent(gameId, rewardContent, 1, True,
                                           timestamp, 'NSLOGIN_REWARD2',
                                           checkinDays)
        contents = TYAssetUtils.buildContentsString(assetList)
        if self._mail:
            mail = strutil.replaceParams(self._mail,
                                         {'rewardContent': contents})
            pkmessage.send(gameId, pkmessage.MESSAGE_TYPE_SYSTEM, userId, mail)
            datachangenotify.sendDataChangeNotify(gameId, userId, 'message')

        ftlog.debug(
            'TYDailyCheckin.gainCheckinReward gameId=', gameId, 'userId=',
            userId, 'timestamp=',
            datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S'),
            'reward=', contents)
        return checkinOk, assetList, checkinDays
Esempio n. 17
0
    def doGetPrize(self, gameId, userId, clientId):
        try:
            timestamp = pktimestamp.getCurrentTimestamp()
            status = neituiguang.loadStatus(userId, timestamp)
            if not status.isBindMobile:
                conf = neituiguang.getConf()
                TodoTaskHelper.sendTodoTask(gameId, userId, TodoTaskBindPhone(conf.pleaseBindPhone, ''))
                return
            count, assetList = neituiguang.getAllReward(status)
            if count > 0:
                conf = neituiguang.getConf()
                prizeRewardTips = strutil.replaceParams(conf.prizeRewardTips,
                                                        {'rewardContent': TYAssetUtils.buildContentsString(assetList)})
                TodoTaskHelper.sendTodoTask(gameId, userId, TodoTaskGoldRain(prizeRewardTips))

                mo = self.buildQueryPrizeResponse(gameId, userId, clientId)
                router.sendToUser(mo, userId)
            else:
                TodoTaskHelper.sendTodoTask(gameId, userId, TodoTaskShowInfo('奖励已经领取', True))
            datachangenotify.sendDataChangeNotify(gameId, userId, ['free', 'promotion_loc'])
        except TYBizException, e:
            TodoTaskHelper.sendTodoTask(gameId, userId, TodoTaskShowInfo(e.message, True))
Esempio n. 18
0
    def _send_rewards(cls, uid, task_id, task_kind, multi_award):
        reward_content = task_kind.reward_content
        if multi_award:
            reward_content = task_kind.multi_reward_content
        userAssets = hallitem.itemSystem.loadUserAssets(uid)
        assetList = userAssets.sendContent(DIZHU_GAMEID,
                                           reward_content, 1, True,
                                           int(time.time()), 'TASK_REWARD',
                                           int(task_id))
        ftlog.debug('UserTaskData._send_rewards', 'task_id=', task_id,
                    'userId=', uid, 'assets=',
                    [(atup[0].kindId, atup[1]) for atup in assetList])
        changed = TYAssetUtils.getChangeDataNames(assetList)
        datachangenotify.sendDataChangeNotify(DIZHU_GAMEID, uid, changed)

        if task_kind.reward_mail:
            contents = TYAssetUtils.buildContentsString(assetList)
            mail = strutil.replaceParams(task_kind.reward_mail,
                                         {'rewardContent': contents})
            pkmessage.sendPrivate(HALL_GAMEID, uid, 0, mail)

        return reward_content
Esempio n. 19
0
    def _sendPrizeIfNeed(self, gameId, userId, clientId, product, prizeContent,
                         timestamp):
        # 加载活动数据
        status = self.loadStatus(userId, timestamp)
        if self._isOverLimit(status, timestamp, 1):
            if ftlog.is_debug():
                ftlog.debug('BuySendPrize._sendPrizeIfNeed OverLimit gameId=',
                            gameId, 'userId=', userId, 'clientId=', clientId,
                            'productId=', product.productId, 'count=',
                            status.limitRecord.count, 'limitCount=',
                            self._limitCount)
            return

        status.limitRecord.count += 1
        status.limitRecord.lastSendTimestamp = timestamp
        self.saveStatus(status)

        # 检查是否已经发过奖励
        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        assetList = userAssets.sendContent(gameId, prizeContent, 1, True,
                                           timestamp, 'ACTIVITY_REWARD',
                                           self.intActId)

        changed = TYAssetUtils.getChangeDataNames(assetList)
        changed.add('promotion_loc')
        datachangenotify.sendDataChangeNotify(gameId, userId, changed)

        if self._mail:
            contents = TYAssetUtils.buildContentsString(assetList)
            mail = strutil.replaceParams(self._mail,
                                         {'rewardContent': contents})
            pkmessage.sendPrivate(HALL_GAMEID, userId, 0, mail)

        ftlog.info('BuySendPrize._sendPrizeIfNeed gameId=', gameId, 'userId=',
                   userId, 'clientId=', clientId, 'productId=',
                   product.productId, 'buyType=', product.buyType, 'actId=',
                   self.actId, 'intActId=', self.intActId, 'sendAssets=',
                   [(at[0].kindId, at[1]) for at in assetList], 'timestamp=',
                   timestamp, 'count=', status.limitRecord.count)
Esempio n. 20
0
    def __getReward(self, rdskey, userId, gameId, actId, excode):
        config_ = daobase.executeMixCmd('HGET', 'excodeinfo:' + rdskey, 'rewards')

        try:
            config_ = json.loads(config_)
        except:
            return {}

        if not isinstance(config_, list):
            return {}

        rewards = {}
        items_ = config_
        ftlog.debug('ExchangeCode.__getReward', 'items=', items_)
        from hall.entity.hallitem import itemSystem
        userAssets = itemSystem.loadUserAssets(userId)
        assetTupleList = []
        for itemDict in items_:
            for assetKindId, count in itemDict.iteritems():
                count = int(count)
                if assetKindId in self._rewardMap:
                    assetKindId = self._rewardMap[assetKindId]['itemId']
                assetTuple = userAssets.addAsset(gameId, assetKindId, count,
                                                 int(time.time()),
                                                 'ACTIVITY_EXCHANGE', 0)

                rewards[assetKindId] = count
                assetTupleList.append(assetTuple)
        datachangenotify.sendDataChangeNotify(gameId, userId, TYAssetUtils.getChangeDataNames(assetTupleList))
        ftlog.info('ExchangeCode->__statistics userid=', userId,
                   'excode=', excode,
                   'rewards=', rewards)
        msg = '兑换码兑换礼品成功,已自动加入到您的背包中,请查收。'
        message.send(9999, message.MESSAGE_TYPE_SYSTEM, userId, msg)
        result = TYAssetUtils.buildContentsString(assetTupleList)
        ftlog.debug('the last msg is result', result)
        return result
Esempio n. 21
0
    def gainCheckinReward(self, gameId, userId, timestamp=None, actionType=0):
        if timestamp is None:
            timestamp = pktimestamp.getCurrentTimestamp()
        checkinOk, checkinDays = self.checkin(gameId, userId, timestamp)
        if ftlog.is_debug():
            ftlog.debug('TYDailyCheckin.gainCheckinReward gameId=', gameId,
                        'userId=', userId,
                        'timestamp=', datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S'),
                        'checkinOk=', checkinOk,
                        'checkinDays=', checkinDays)

        if not checkinOk:
            return checkinOk, [], checkinDays
        # 发送奖励
        rewardContent = self.getRewardContent(checkinDays)

        ebus = TGHall.getEventBus()
        ebus.publishEvent(TYDailyCheckinRewardEvent(gameId, userId, rewardContent, actionType))

        if not rewardContent:
            return checkinOk, [], checkinDays

        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        assetList = userAssets.sendContent(gameId, rewardContent, 1, True,
                                           timestamp, 'NSLOGIN_REWARD2', checkinDays)
        contents = TYAssetUtils.buildContentsString(assetList)
        if self._mail:
            mail = strutil.replaceParams(self._mail, {'rewardContent': contents})
            pkmessage.send(gameId, pkmessage.MESSAGE_TYPE_SYSTEM, userId, mail)
            datachangenotify.sendDataChangeNotify(gameId, userId, 'message')

        ftlog.debug('TYDailyCheckin.gainCheckinReward gameId=', gameId,
                    'userId=', userId,
                    'timestamp=', datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S'),
                    'reward=', contents)
        return checkinOk, assetList, checkinDays
Esempio n. 22
0
 def _sendTaskReward(self, task, timestamp, eventId, intEventParam):
     if task.taskKind.rewardContent:
         userAssets = hallitem.itemSystem.loadUserAssets(
             task.userTaskUnit.userId)
         assetList = userAssets.sendContent(self.gameId,
                                            task.taskKind.rewardContent, 1,
                                            True, timestamp, eventId,
                                            intEventParam)
         changeNames = TYAssetUtils.getChangeDataNames(assetList)
         rewardMail = task.taskKind.rewardMail
         if rewardMail:
             contents = TYAssetUtils.buildContentsString(assetList)
             rewardMail = strutil.replaceParams(
                 rewardMail, {
                     'rewardContent': contents,
                     'taskName': task.taskKind.name
                 })
             message.send(self.gameId, message.MESSAGE_TYPE_SYSTEM,
                          task.userId, rewardMail)
             changeNames.add('message')
         datachangenotify.sendDataChangeNotify(self.gameId, task.userId,
                                               changeNames)
         return assetList
     return []
Esempio n. 23
0
 def buildGotGiftDesc(self, gotVipGiftResult):
     desc = hallvip.vipSystem.getGotGiftDesc()
     if desc:
         contents = TYAssetUtils.buildContentsString(gotVipGiftResult.giftItemList)
         desc = strutil.replaceParams(desc, {'rewardContent': contents})
     return desc
Esempio n. 24
0
def doTreasureBox(userId, bigRoomId):
    ftlog.debug('doTreasureBox userId=', userId, 'bigRoomId=', bigRoomId)
    # 判定房间配置
    tbconfiger = dizhuconf.getTreasureBoxInfo(bigRoomId)
    if not tbconfiger or not tbconfiger.get('reward', None):
        ftlog.debug('doTreasureBox->userIds=', userId, 'bigRoomId=', bigRoomId,
                    'not tbox room !')
        return {'ok': 0, 'info': '本房间不支持宝箱,请进入高倍房再使用'}
    # 判定是否可以领取
    tbplaytimes, tblasttime, datas = getUserTbInfo(userId, bigRoomId)
    tbplaycount = tbconfiger['playCount']
    if tblasttime <= 0 or tbplaytimes < tbplaycount:
        ftlog.debug('doTreasureBox->userIds=', userId, 'bigRoomId=', bigRoomId,
                    'can not tbox !')
        return {
            'ok': 0,
            'tbt': min(tbplaytimes, tbplaycount),
            'tbc': tbplaycount,
            'info': tbconfiger['desc']
        }
    # 更新宝箱状态
    datas['tblasttime'] = int(time.time())
    datas['tbplaytimes'] = 0
    _setTbData(userId, datas)

    rewards = tbconfiger['reward']
    content = TYContentRegister.decodeFromDict(rewards)
    sitems = content.getItems()
    # 活动加成
    ditems = _getDoubleInfos(bigRoomId)
    if ditems:
        for si in sitems:
            kindId = si.assetKindId
            mutil = ditems.get(kindId, 0)
            if mutil and mutil > 0:
                si.count = int(si.count * mutil)
    # 发送道具
    # ua = hallitem.itemSystem.loadUserAssets(userId)
    # aslist = ua.sendContentItemList(DIZHU_GAMEID, sitems, 1, True,
    #                                 timestamp.getCurrentTimestamp(), 'TASK_OPEN_TBOX_REWARD', bigRoomId)
    aslist = dizhu_util.sendRewardItems(userId, sitems, '',
                                        'TASK_OPEN_TBOX_REWARD', bigRoomId)
    addmsg = TYAssetUtils.buildContentsString(aslist)
    items = []
    for x in aslist:
        kindId = hallconf.translateAssetKindIdToOld(x[0].kindId)
        items.append({'item': kindId, 'count': x[1], 'total': x[2]})
        if kindId in ['user:coupon', 'COUPON']:
            # 广播事件
            from hall.game import TGHall
            TGHall.getEventBus().publishEvent(
                UserCouponReceiveEvent(
                    HALL_GAMEID, userId, x[1],
                    user_coupon_details.USER_COUPON_TABLE_TBBOX))

    from dizhu.game import TGDizhu
    TGDizhu.getEventBus().publishEvent(
        UserTBoxLotteryEvent(DIZHU_GAMEID, userId))
    datas = {
        'ok': 1,
        'tbt': 0,
        'tbc': tbplaycount,
        'info': '开启宝箱,获得' + addmsg,
        'items': items
    }
    ftlog.debug('doTreasureBox->userIds=', userId, 'bigRoomId=', bigRoomId,
                datas)
    return datas
 def _exchange(self, userId, gameId, clientId, activityId, exchangeId):
     key = "TYActivity:%d:%d:%s" % (gameId, userId, activityId)
     ftlog.debug("getGifts key:", key)
     ftlog.debug("getGifts key!!!exchangeId:", exchangeId)
     num = daobase.executeUserCmd(userId, 'hget', key, 'giftNum')
     if not num:
         num = 0
     giftsNum = num
     exConfig = self._getExchangeConfig(exchangeId)
     if not exConfig:
         return {"errorInfo": "config not exist", "errorCode": 2}
     needCount = exConfig["consumeCount"]
     limit = exConfig["limitTimes"]
     nowDateStr = time.strftime("%Y-%m-%d", time.localtime(time.time()))
     exTimesField = "exTimes:%d:%s" % (exchangeId, nowDateStr)
     key = "TYActivity:%d:%d:%s" % (gameId, userId, activityId)
     ftlog.debug("_exchange key:", key)
     exchangeResult = daobase.executeUserLua(userId, self.EXCHANGE_SCRIPT,
                                             4, key, needCount, limit, exTimesField)
     if exchangeResult == 1:
         ftlog.info("exceed limit,", "userId", userId, "gameId", gameId, "activityId", activityId,
                    "exchangeId", exchangeId, clientId)
         return {"exchangeResult": [], "reason": u"今日兑换次数已满!", "list": [], "giftsNum": giftsNum}
     if exchangeResult == 2:
         ftlog.info("no enough gifts,", "userId", userId, "gameId", gameId, "activityId", activityId,
                    "exchangeId", exchangeId, clientId)
         ftlog.debug("self._clientConf:", self._clientConf)
         giftName = self._clientConf["config"]["gift"]["name"]
         info = u"您的%s不足!" % giftName
         ftlog.debug("_exchange key123:", key)
         ftlog.debug("_exchange key123:", giftsNum)
         return {"exchangeResult": [], "reason": info, "list": [], "giftsNum": giftsNum}
     result = {}
     result["exchangeResult"] = []
     from hall.entity.hallitem import itemSystem
     userAssets = itemSystem.loadUserAssets(userId)
     assetList = []
     for item in exConfig["items"]:
         asset = userAssets.addAsset(gameId, item['productId'], item['count'], int(time.time()),
                                     'ACTIVITY_GETSCORE', 0)
         assetList.append(asset)
         result["exchangeResult"].append({"name": item["name"], "count": item["count"],
                                          "productId": item["productId"], "unit": item["unit"]})
     info = '兑换成功,您获得%s' % (TYAssetUtils.buildContentsString(assetList, True))
     ftlog.info('exchangeCode userId=', userId,
                'gameId=', gameId,
                'clientId=', clientId,
                'activityId=', activityId,
                'assetList=', [(atup[0].kindId, atup[1]) for atup in assetList])
     changeNames = TYAssetUtils.getChangeDataNames(assetList)
     datachangenotify.sendDataChangeNotify(gameId, userId, changeNames)
     result["reason"] = info
     result["list"] = []
     '''
         拿到当前剩余的积分,并返回
     '''
     ftlog.debug("_exchange key123:", key)
     result["giftsNum"] = giftsNum
     ftlog.debug("_exchange key123456:", giftsNum)
     ftlog.info("exchangeResult,", "userId", userId, "gameId", gameId, "activityId", activityId,
                "exchangeId", exchangeId, clientId, result)
     return result
Esempio n. 26
0
def _onOrderDelivery(event):
    from hall.entity import hallitem
    nowDT = datetime.now()
    order = event.orderDeliveryResult.order

    if ((_conf.startDT and nowDT < _conf.startDT)
        or (_conf.endDT and nowDT >= _conf.endDT)):
        if ftlog.is_debug():
            ftlog.debug('buy_send_gift._onOrderDelivery outofTime userId=', event.userId,
                        'orderId=', order.orderId,
                        'productId=', order.productId,
                        'nowDT=', nowDT.strftime('%Y-%m-%d %H:%M:%S'),
                        'startDT=', _conf.startDT.strftime('%Y-%m-%d %H:%M:%S'),
                        'endDT=', _conf.endDT.strftime('%Y-%m-%d %H:%M:%S'))
        return

    giftConf = _conf.findGiftConf(order.productId)
    if not giftConf:
        if ftlog.is_debug():
            ftlog.debug('buy_send_gift._onOrderDelivery noGiftConf userId=', event.userId,
                        'orderId=', order.orderId,
                        'productId=', order.productId,
                        'orderClientId=', order.clientId)
        return

    hallGameId = strutil.getGameIdFromHallClientId(order.clientId)
    if hallGameId not in giftConf.gameIds:
        if ftlog.is_debug():
            ftlog.debug('buy_send_gift._onOrderDelivery notInGameIds userId=', event.userId,
                        'orderId=', order.orderId,
                        'productId=', order.productId,
                        'giftConf=', giftConf.conf,
                        'orderClientId=', order.clientId,
                        'hallGameId=', hallGameId,
                        'gameIds=', giftConf.gameIds)
        return

    count = 0
    if giftConf.maxCount >= 0:
        limitD = gamedata.getGameAttrJson(order.userId, hallGameId, 'act.buy_send_gift', {})
        count = limitD.get(order.productId, 0)
        if count + 1 > giftConf.maxCount:
            ftlog.info('buy_send_gift._onOrderDelivery overLimit userId=', event.userId,
                       'orderId=', order.orderId,
                       'productId=', order.productId,
                       'giftConf=', giftConf.conf if giftConf else None,
                       'orderClientId=', order.clientId,
                       'count=', count,
                       'maxCount=', giftConf.maxCount)
            return
        count += 1
        limitD[order.productId] = count
        gamedata.setGameAttr(order.userId, hallGameId, 'act.buy_send_gift', strutil.dumps(limitD))

    assetList = None
    if giftConf.giftContent:
        userAssets = hallitem.itemSystem.loadUserAssets(order.userId)
        # def sendContent(self, gameId, content, count, ignoreUnknown, timestamp, eventId, intEventParam):
        assetList = userAssets.sendContent(hallGameId, giftConf.giftContent, 1,
                                           True, pktimestamp.getCurrentTimestamp(),
                                           'ACTIVITY_REWARD',
                                           10043)
    changedDataNames = TYAssetUtils.getChangeDataNames(assetList) if assetList else set()

    contentStr = TYAssetUtils.buildContentsString(assetList) if assetList else ''
    if giftConf.mail:
        mail = strutil.replaceParams(giftConf.mail, {'gotContent': contentStr, 'price': order.product.price})
        message.send(hallGameId, message.MESSAGE_TYPE_SYSTEM, order.userId, mail)
        changedDataNames.add('message')
    if changedDataNames:
        datachangenotify.sendDataChangeNotify(HALL_GAMEID, order.userId, changedDataNames)
    ftlog.info('buy_send_gift._onOrderDelivery sendGift userId=', event.userId,
               'orderId=', order.orderId,
               'productId=', order.productId,
               'giftConf=', giftConf.conf if giftConf else None,
               'orderClientId=', order.clientId,
               'count=', count,
               'maxCount=', giftConf.maxCount,
               'assetList=', [(a[0].kindId, a[1]) for a in assetList] if assetList else None)
Esempio n. 27
0
    def openRedEnvelope(self, userId, itemId=''):
        '''
        打开红包
        '''
        global _redEnvelopeConfig

        # 是否领取过
        receivers = daobase.executeMixCmd('LRANGE', self.dbPrefix + self.id + self.RECEIVER, 0, -1)
        if receivers:
            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope receivers:', receivers)

            for receiverJson in receivers:
                receiver = json.loads(receiverJson)
                if ftlog.is_debug():
                    ftlog.debug('TYRedEnvelope.openRedEnvelope receiver:', receiver)
                if userId == receiver['userId']:
                    return False, _redEnvelopeConfig['tips']['opened']

        # 构造添加给获取红包用户的奖励清单        
        contentItemList = []
        prizesJson = self._getPrize(itemId)
        # prizesJson = daobase.executeMixCmd('LPOP', self.dbPrefix + self.id + self.PACKAGES)
        daobase.executeMixCmd('expire', self.dbPrefix + self.id + self.PACKAGES, self.expiredTime)

        if prizesJson:
            prizes = json.loads(prizesJson)
            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope prizes:', prizes)
            for prize in prizes:
                if ftlog.is_debug():
                    ftlog.debug('TYRedEnvelope.openRedEnvelope prize:', prize)

                result, _itemId = self.getAssetID(prize)
                if result == False:
                    ftlog.debug('TYRedEnvelope.openRedEnvelope prize err1: ', prize, ' left: ', self.contents);
                    continue

                result, value = self.getItemValue(prize)
                if result == False:
                    ftlog.debug('TYRedEnvelope.openRedEnvelope prize err2: ', prize, ' left: ', self.contents);
                    continue

                if ftlog.is_debug():
                    ftlog.debug('TYRedEnvelope.openRedEnvelope itemId:', _itemId)
                    ftlog.debug('TYRedEnvelope.openRedEnvelope count:', prizes[prize] * value)

                contentItemList.append(
                    TYContentItem.decodeFromDict({'itemId': _itemId, 'count': prizes[prize] * value}))

            if ftlog.is_debug():
                ftlog.debug('contentItemList:', contentItemList)

            userAssets = hallitem.itemSystem.loadUserAssets(userId)
            # 添加奖励
            results = userAssets.sendContentItemList(HALL_GAMEID, contentItemList, 1, True,
                                                     pktimestamp.getCurrentTimestamp(), self.EVENTID, 0)
            # notify
            datachangenotify.sendDataChangeNotify(HALL_GAMEID, userId, TYAssetUtils.getChangeDataNames(results))
            # 构造奖励字符串
            prizeString = TYAssetUtils.buildContentsString(results)

            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope prizeString:', prizeString)

            # add receiver
            re = {}
            re['userId'] = userId
            re['prize'] = prizes
            re['prizeStr'] = prizeString
            re['time'] = pktimestamp.formatTimeMs()

            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope add receiver re: ', re)
            daobase.executeMixCmd('LPUSH', self.dbPrefix + self.id + self.RECEIVER, json.dumps(re))
            daobase.executeMixCmd('expire', self.dbPrefix + self.id + self.RECEIVER, self.expiredTime)

            # make response
            response = {}
            response['envelopeId'] = self.id
            response['prizes'] = prizes
            response['prizeStr'] = prizeString

            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope response: ', response)

            return True, response
        else:
            if self.state != self.STATE_FINISH:
                self.state = self.STATE_FINISH
                self.save2DB()

            return False, _redEnvelopeConfig['tips']['finished']
Esempio n. 28
0
def _onOrderDelivery(event):
    from hall.entity import hallitem
    nowDT = datetime.now()
    order = event.orderDeliveryResult.order

    if ((_conf.startDT and nowDT < _conf.startDT)
            or (_conf.endDT and nowDT >= _conf.endDT)):
        if ftlog.is_debug():
            ftlog.debug('buy_send_gift._onOrderDelivery outofTime userId=',
                        event.userId, 'orderId=', order.orderId, 'productId=',
                        order.productId, 'nowDT=',
                        nowDT.strftime('%Y-%m-%d %H:%M:%S'), 'startDT=',
                        _conf.startDT.strftime('%Y-%m-%d %H:%M:%S'), 'endDT=',
                        _conf.endDT.strftime('%Y-%m-%d %H:%M:%S'))
        return

    giftConf = _conf.findGiftConf(order.productId)
    if not giftConf:
        if ftlog.is_debug():
            ftlog.debug('buy_send_gift._onOrderDelivery noGiftConf userId=',
                        event.userId, 'orderId=', order.orderId, 'productId=',
                        order.productId, 'orderClientId=', order.clientId)
        return

    hallGameId = strutil.getGameIdFromHallClientId(order.clientId)
    if hallGameId not in giftConf.gameIds:
        if ftlog.is_debug():
            ftlog.debug('buy_send_gift._onOrderDelivery notInGameIds userId=',
                        event.userId, 'orderId=', order.orderId, 'productId=',
                        order.productId, 'giftConf=', giftConf.conf,
                        'orderClientId=', order.clientId, 'hallGameId=',
                        hallGameId, 'gameIds=', giftConf.gameIds)
        return

    count = 0
    if giftConf.maxCount >= 0:
        limitD = gamedata.getGameAttrJson(order.userId, hallGameId,
                                          'act.buy_send_gift', {})
        count = limitD.get(order.productId, 0)
        if count + 1 > giftConf.maxCount:
            ftlog.info('buy_send_gift._onOrderDelivery overLimit userId=',
                       event.userId, 'orderId=', order.orderId, 'productId=',
                       order.productId, 'giftConf=',
                       giftConf.conf if giftConf else None, 'orderClientId=',
                       order.clientId, 'count=', count, 'maxCount=',
                       giftConf.maxCount)
            return
        count += 1
        limitD[order.productId] = count
        gamedata.setGameAttr(order.userId, hallGameId, 'act.buy_send_gift',
                             strutil.dumps(limitD))

    assetList = None
    if giftConf.giftContent:
        userAssets = hallitem.itemSystem.loadUserAssets(order.userId)
        #def sendContent(self, gameId, content, count, ignoreUnknown, timestamp, eventId, intEventParam):
        assetList = userAssets.sendContent(hallGameId, giftConf.giftContent, 1,
                                           True,
                                           pktimestamp.getCurrentTimestamp(),
                                           'ACTIVITY_REWARD', 10043)
    changedDataNames = TYAssetUtils.getChangeDataNames(
        assetList) if assetList else set()

    contentStr = TYAssetUtils.buildContentsString(
        assetList) if assetList else ''
    if giftConf.mail:
        mail = strutil.replaceParams(giftConf.mail, {
            'gotContent': contentStr,
            'price': order.product.price
        })
        message.send(hallGameId, message.MESSAGE_TYPE_SYSTEM, order.userId,
                     mail)
        changedDataNames.add('message')
    if changedDataNames:
        datachangenotify.sendDataChangeNotify(HALL_GAMEID, order.userId,
                                              changedDataNames)
    ftlog.info('buy_send_gift._onOrderDelivery sendGift userId=', event.userId,
               'orderId=', order.orderId, 'productId=', order.productId,
               'giftConf=', giftConf.conf if giftConf else None,
               'orderClientId=', order.clientId, 'count=', count, 'maxCount=',
               giftConf.maxCount, 'assetList=',
               [(a[0].kindId, a[1]) for a in assetList] if assetList else None)
Esempio n. 29
0
    def openRedEnvelope(self, userId, itemId=''):
        '''
        打开红包
        '''
        global _redEnvelopeConfig

        # 是否领取过
        receivers = daobase.executeMixCmd(
            'LRANGE', self.dbPrefix + self.id + self.RECEIVER, 0, -1)
        if receivers:
            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope receivers:',
                            receivers)

            for receiverJson in receivers:
                receiver = json.loads(receiverJson)
                if ftlog.is_debug():
                    ftlog.debug('TYRedEnvelope.openRedEnvelope receiver:',
                                receiver)
                if userId == receiver['userId']:
                    return False, _redEnvelopeConfig['tips']['opened']

        # 构造添加给获取红包用户的奖励清单
        contentItemList = []
        prizesJson = self._getPrize(itemId)
        # prizesJson = daobase.executeMixCmd('LPOP', self.dbPrefix + self.id + self.PACKAGES)
        daobase.executeMixCmd('expire',
                              self.dbPrefix + self.id + self.PACKAGES,
                              self.expiredTime)

        if prizesJson:
            prizes = json.loads(prizesJson)
            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope prizes:', prizes)
            for prize in prizes:
                if ftlog.is_debug():
                    ftlog.debug('TYRedEnvelope.openRedEnvelope prize:', prize)

                result, _itemId = self.getAssetID(prize)
                if result == False:
                    ftlog.debug('TYRedEnvelope.openRedEnvelope prize err1: ',
                                prize, ' left: ', self.contents)
                    continue

                result, value = self.getItemValue(prize)
                if result == False:
                    ftlog.debug('TYRedEnvelope.openRedEnvelope prize err2: ',
                                prize, ' left: ', self.contents)
                    continue

                if ftlog.is_debug():
                    ftlog.debug('TYRedEnvelope.openRedEnvelope itemId:',
                                _itemId)
                    ftlog.debug('TYRedEnvelope.openRedEnvelope count:',
                                prizes[prize] * value)

                contentItemList.append(
                    TYContentItem.decodeFromDict({
                        'itemId': _itemId,
                        'count': prizes[prize] * value
                    }))

            if ftlog.is_debug():
                ftlog.debug('contentItemList:', contentItemList)

            userAssets = hallitem.itemSystem.loadUserAssets(userId)
            # 添加奖励
            results = userAssets.sendContentItemList(
                HALL_GAMEID, contentItemList, 1, True,
                pktimestamp.getCurrentTimestamp(), self.EVENTID, 0)
            # notify
            datachangenotify.sendDataChangeNotify(
                HALL_GAMEID, userId, TYAssetUtils.getChangeDataNames(results))
            # 构造奖励字符串
            prizeString = TYAssetUtils.buildContentsString(results)

            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope prizeString:',
                            prizeString)

            # add receiver
            re = {}
            re['userId'] = userId
            re['prize'] = prizes
            re['prizeStr'] = prizeString
            re['time'] = pktimestamp.formatTimeMs()

            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope add receiver re: ',
                            re)
            daobase.executeMixCmd('LPUSH',
                                  self.dbPrefix + self.id + self.RECEIVER,
                                  json.dumps(re))
            daobase.executeMixCmd('expire',
                                  self.dbPrefix + self.id + self.RECEIVER,
                                  self.expiredTime)

            # make response
            response = {}
            response['envelopeId'] = self.id
            response['prizes'] = prizes
            response['prizeStr'] = prizeString

            if ftlog.is_debug():
                ftlog.debug('TYRedEnvelope.openRedEnvelope response: ',
                            response)

            return True, response
        else:
            if self.state != self.STATE_FINISH:
                self.state = self.STATE_FINISH
                self.save2DB()

            return False, _redEnvelopeConfig['tips']['finished']
Esempio n. 30
0
    def handleEvent(cls, event):
        conf = dizhuconf.getActivityConf('month_checkin_gift')
        monthDayCount = calendar.monthrange(event.checkinDate.year,
                                            event.checkinDate.month)[1]
        giftDayCount = conf.get('giftDayCount', -1)
        if giftDayCount <= 0:
            giftDayCount = monthDayCount
        giftDayCount = min(giftDayCount, monthDayCount)

        clientId = sessiondata.getClientId(event.userId)
        hallGameId = strutil.getGameIdFromHallClientId(clientId)

        if hallGameId != DIZHU_GAMEID:
            return

        if ftlog.is_debug():
            ftlog.debug('MonthCheckinGift.handleEvent userId=',
                        event.userId, 'gameId=', event.gameId, 'eventType=',
                        type(event), 'checkinDate=', event.checkinDate,
                        'allCheckinCount=', event.status.allCheckinCount,
                        'giftDayCount=', giftDayCount, 'monthDayCount=',
                        monthDayCount)

        giftContent = None
        try:
            if not Tool.checkNow(conf.get('datetime_start'),
                                 conf.get('datetime_end')):
                ftlog.debug('MonthCheckinGift.handleEvent outOfDate userId=',
                            event.userId, 'gameId=', event.gameId,
                            'eventType=', type(event), 'checkinDate=',
                            event.checkinDate, 'allCheckinCount=',
                            event.status.allCheckinCount, 'giftDayCount=',
                            giftDayCount, 'monthDayCount=', monthDayCount)
                return

            giftContent = TYContentRegister.decodeFromDict(
                conf.get('giftContent'))
        except:
            ftlog.error('MonthCheckinGift.handleEvent userId=',
                        event.userId, 'gameId=', event.gameId, 'eventType=',
                        type(event), 'checkinDate=', event.checkinDate,
                        'allCheckinCount=', event.status.allCheckinCount,
                        'giftDayCount=', giftDayCount, 'monthDayCount=',
                        monthDayCount)
            return

        if event.status.allCheckinCount >= giftDayCount:
            assetList = None
            if giftContent:
                userAssets = hallitem.itemSystem.loadUserAssets(event.userId)
                assetList = userAssets.sendContent(
                    DIZHU_GAMEID, giftContent, 1, True,
                    pktimestamp.getCurrentTimestamp(), 'ACTIVITY_REWARD',
                    cls.ACTIVITY_ID)
                changed = TYAssetUtils.getChangeDataNames(assetList)
                mail = conf.get('mail', '')
                if mail:
                    gotContent = giftContent.desc if giftContent.desc else TYAssetUtils.buildContentsString(
                        assetList)
                    mail = strutil.replaceParams(mail,
                                                 {'gotContent': gotContent})
                    message.sendPrivate(HALL_GAMEID, event.userId, 0, mail)
                    changed.add('message')
                datachangenotify.sendDataChangeNotify(HALL_GAMEID,
                                                      event.userId, changed)

            ftlog.info('MonthCheckinGift.statics sendGift userId=',
                       event.userId, 'gameId=', event.gameId, 'eventType=',
                       type(event), 'checkinDate=', event.checkinDate,
                       'allCheckinCount=', event.status.allCheckinCount,
                       'giftDayCount=', giftDayCount, 'monthDayCount=',
                       monthDayCount, 'rewards=',
                       [(a[0].kindId, a[1])
                        for a in assetList] if assetList else None)
Esempio n. 31
0
def doTreasureBox(gameId, userId, bigRoomId):
    data = _getTbData(gameId, userId)
    bigRoomId = data['tbroomid']
    if ftlog.is_debug():
        ftlog.debug('treasurebox.doTreasureBox', 'gameId=', gameId, 'userId=',
                    userId, 'bigRoomId=', bigRoomId)
    # 判定房间配置
    tbconfiger = getTreasureBoxConf(gameId, bigRoomId)
    if not tbconfiger or not tbconfiger.get('reward', None):
        if ftlog.is_debug():
            ftlog.debug('treasurebox.doTreasureBox', 'gameId=', gameId,
                        'userId=', userId, 'err=', 'NotTBoxRoom')
        return {'ok': 0, 'info': '本房间不支持宝箱,请进入高倍房再使用'}
    # 判定是否可以领取
    tbplaytimes, tblasttime, datas = getUserTbInfo(gameId, userId, bigRoomId)
    tbplaycount = tbconfiger['playCount']
    if tblasttime <= 0 or tbplaytimes < tbplaycount:
        if ftlog.is_debug():
            ftlog.debug('treasurebox.doTreasureBox', 'gameId=', gameId,
                        'userId=', userId, 'err=', 'CanNotTBox')
        return {
            'ok': 0,
            'tbt': min(tbplaytimes, tbplaycount),
            'tbc': tbplaycount,
            'info': tbconfiger['desc']
        }
    # 更新宝箱状态
    datas['tblasttime'] = int(time.time())
    datas['tbplaytimes'] = 0
    _setTbData(gameId, userId, datas)

    rewards = tbconfiger['reward']
    content = TYContentRegister.decodeFromDict(rewards)
    sitems = content.getItems()
    # 活动加成
    ditems = _getDoubleInfos(gameId, bigRoomId)
    if ditems:
        for si in sitems:
            kindId = si.assetKindId
            mutil = ditems.get(kindId, 0)
            if mutil and mutil > 0:
                si.count = int(si.count * mutil)
    # 发送道具
    ua = hallitem.itemSystem.loadUserAssets(userId)
    aslist = ua.sendContentItemList(gameId, sitems, 1, True,
                                    timestamp.getCurrentTimestamp(),
                                    'TASK_OPEN_TBOX_REWARD', bigRoomId)
    addmsg = TYAssetUtils.buildContentsString(aslist)
    items = []
    for x in aslist:
        kindId = hallconf.translateAssetKindIdToOld(x[0].kindId)
        items.append({'item': kindId, 'count': x[1], 'total': x[2]})

    TYGame(gameId).getEventBus().publishEvent(
        UserTBoxLotteryEvent(gameId, userId))
    data = {
        'ok': 1,
        'tbt': 0,
        'tbc': tbplaycount,
        'info': '开启宝箱,获得' + addmsg,
        'items': items
    }
    if ftlog.is_debug():
        ftlog.debug('treasurebox.doTreasureBox', 'gameId=', gameId, 'userId=',
                    userId, 'data=', data)
    return data