def sellAllTempPackage(self):
        '''卖出临时包裹中所有物品'''
        id = self._owner.baseInfo.id
        coin = self._owner.finance.getCoin()
        cannotSellCount = 0
        itemSoldPosition = []
        items = self._tempPackage.getItems()
        if len(items) == 0:
            return {'result':False, 'reason':u'您的临时包裹中没有物品'}
        for item in items:
            itemComponent = item[1]
            trade = int(itemComponent.baseInfo.getItemTemplate()['trade'])
            if trade >= 4:
                cannotSellCount += 1
                continue
            sellPrice = itemComponent.finance.getPrice()
            coin += sellPrice
            dbaccess.deleteItemsInTemPackage(itemComponent.baseInfo.id, itemComponent.baseInfo.getIdInPackage(),id)
            itemSoldPosition.append(item[0])
#            items.remove(item)
        dbaccess.updatePlayerInfo(id, {'coin':coin})
        self.setTempPackage()
#        coin += self._owner.finance.getCoin()
        self._owner.finance.setCoin(coin)
        result = dbaccess.getPlayerItemsInTempPackage(self._owner.baseInfo.id)
        if not result:
            pushMessage(str(self._owner.baseInfo.id), 'closeTempPackage')
        return {'result':True, 'coin':coin, 'itemSoldPosition':itemSoldPosition, 'cannotSellCount':cannotSellCount}
示例#2
0
    def immediateRefreshActiveRewardQuestList(self, payType, payNum, npcId):
        '''
                      立即刷新赏金任务列表
        @param payType: 支付类型
        @param payNum: 支付数量
        '''
        id = self._owner.baseInfo.id

        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        if payType == 'gold':
            gold -= payNum
            if gold < 0:
                return {'result':False, 'reason':u'您的黄金量不足'}
            dbaccess.updatePlayerInfo(id, {'gold':gold})
            self._owner.finance.setGold(gold)
        else:
            coupon -= payNum
            if coupon < 0:
                return {'result':False, 'reason':u'您的礼券量不足'}
            dbaccess.updatePlayerInfo(id, {'coupon':coupon})
            self._owner.finance.setCoupon(coupon)

        self._allQuestCallLater.cancel()
        activeRewardQuestList, progressingList = self.refreshActiveRewardQuestList(npcId,True)
        return{'result':True, 'data':{'activeRewardQuestList':activeRewardQuestList, \
                                     'progressQuestList':progressingList, \
                                     'intervalSeconds':self.AUTOREFRESHTIME, \
                                     'gold':gold, 'coupon':coupon}}
    def reliveOnUsingGold(self, payType, payNum):
        '''黄金复活'''
        id = self._owner.baseInfo.id
        profession = self._owner.profession.getProfession()
        level = self._owner.level.getLevel()

        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        if payType == 'gold':
            gold -= payNum
            if gold < 0:
                return {'result': False, 'reason': u'您的黄金量不足'}
        elif payType == 'coupon':
            coupon -= payNum
            if coupon < 0:
                return {'result': False, 'reason': u'您的礼券量不足'}
        coin = self._owner.finance.getCoin()
        hp = self.getMaxHp(profession, id, level)
        mp = self.getMaxMp(profession, id, level)
        status = 1

        attrs = {'gold':gold, 'coupon':coupon, 'status':status, \
                 'hp':hp, 'mp':mp}
        dbaccess.updatePlayerInfo(id, attrs)
        self._owner.attribute.setHp(hp)
        self._owner.attribute.setMp(mp)
        self._owner.baseInfo.setStatus(status)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'hp':hp, 'mp':mp, 'coin':coin, 'gold':gold, \
                                     'coupon':coupon, 'status':u'正常', 'type':3}}
 def _doSleep(self, index, payType, payNum, energy, energyDelta, gold, coupon, restRecord, type):
     id = self._owner.baseInfo.id
     if payType == 'gold':
         gold -= payNum
         if gold < 0:
             return {'result':False, 'reason':u'您的黄金量不足'}
         if type == 'spoor':
             if restRecord[index] >= 2:
                 return {'result':False, 'reason':u'您今天不能此操作'}
         else:
             if restRecord[index] >= 1:
                 return {'result':False, 'reason':u'您今天不能此操作'}
         energy += energyDelta
         if energy > 200:
             return {'result':False, 'reason':u'您的活力已达上限'}
         dbaccess.updatePlayerInfo(id, {'energy':energy, 'gold':gold})
     else:
         coupon -= payNum
         if coupon < 0:
             return {'result':False, 'reason':u'您的礼券量不足'}
         energy += energyDelta
         if energy > 200:
             return {'result':False, 'reason':u'您的活力已达上限'}
         dbaccess.updatePlayerInfo(id, {'energy':energy, 'coupon':coupon})
     return {'result':True, 'data':{'gold':gold, 'coupon':coupon, 'energy':energy}}
    def reliveOnUsingGold(self, payType, payNum):
        '''黄金复活'''
        id = self._owner.baseInfo.id
        profession = self._owner.profession.getProfession()
        level = self._owner.level.getLevel()

        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        if payType == 'gold':
            gold -= payNum
            if gold < 0:
                return {'result':False, 'reason':u'您的黄金量不足'}
        elif payType == 'coupon':
            coupon -= payNum
            if coupon < 0:
                return {'result':False, 'reason':u'您的礼券量不足'}
        coin = self._owner.finance.getCoin()
        hp = self.getMaxHp(profession, id, level)
        mp = self.getMaxMp(profession, id, level)
        status = 1

        attrs = {'gold':gold, 'coupon':coupon, 'status':status, \
                 'hp':hp, 'mp':mp}
        dbaccess.updatePlayerInfo(id, attrs)
        self._owner.attribute.setHp(hp)
        self._owner.attribute.setMp(mp)
        self._owner.baseInfo.setStatus(status)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'hp':hp, 'mp':mp, 'coin':coin, 'gold':gold, \
                                     'coupon':coupon, 'status':u'正常', 'type':3}}
    def sellPackageItem(self, itemId, packageType, count):
        '''卖出包裹蓝中的物品'''
        id = self._owner.baseInfo.id
        itemRecord = dbaccess.getItemInfo(itemId)
        if not itemRecord:
            return {'result':False, 'reason':u'此物品不存在'}
        itemTemplateInfo = loader.getById('item_template', itemRecord[2], '*')
        item = Item(itemId, itemTemplateInfo['name'])
        item.baseInfo.setItemTemplate(itemTemplateInfo)
        item.attribute.setSelfExtraAttribute(itemRecord[3])
        item.attribute.setDropExtraAttributes(itemRecord[4])
        trade = itemTemplateInfo['trade']

        bodyType = self.traverseBodyType(itemTemplateInfo['bodyType'] - 1)
        idInPackage = dbaccess.getIdFromPackagesByItemId(id, itemId, itemRecord[2], bodyType, packageType)

        if trade >= 4:
            return {'result':False, 'reason':u'物品不能出售'}
        else:
            price = item.finance.getPrice()
            price *= count
            coin = self._owner.finance.getCoin() + price
            self._owner.finance.setCoin(coin)
            dbaccess.deletePackageItem(idInPackage, itemId, packageType, bodyType, id)
            dbaccess.updatePlayerInfo(id, {'coin':coin})
            self.refreshPackageByType(packageType)
            result = {'result':True, 'data':{'idInPackage':idInPackage, 'coin':coin}}
            if packageType == 'equipment_slot':
                result['data']['isEquipmentSlot'] = True
            else:
                result['data']['isEquipmentSlot'] = False
            return result
示例#7
0
    def doWhenPracticeFinsihed(self, attrs):
        '''当修炼结束时'''
        id = self._owner.baseInfo.id
        practiceRecord = dbaccess.getPlayerPracticeRecord(id)
        monsterId = practiceRecord[2]
        countHit = practiceRecord[3]
        finishTime = practiceRecord[5]
        now = datetime.datetime.now()

        if not finishTime or (finishTime - now).seconds < 0:
            return
        self._owner.level.setExp(attrs['exp'])
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, attrs)
        self._owner.baseInfo.setStatus(1)

        npc = loader.getById('npc', monsterId, '*')
        if npc:
            #            item = None
            for i in range(0, countHit):
                self._owner.quest.onSuccessKillOneMonster(monsterId)

            self.placePracticeItems(countHit, npc)

        pushMessage(str(id), 'finish')
 def putOneItemIntoTempPackage(self, item, stack = 1):
     '''
                 放置一个物品到临时包裹栏中
     @param item: 物品
     '''
     self.setTempPackage()
     self.setPackage()
     if item:
         ret = self._tempPackage.isTempPackageFull()
         if not ret[0]:
             position = ret[1]
             position = str(position[0]) + "," + str(position[1])
             dbaccess.insertRecordInTempPackage([0, self._owner.baseInfo.id, item[0], position, stack])
             self.setTempPackage()
         else:#如果临时包裹栏已满,算成铜币,加到玩家身上
             itemTemplateId = item[2]
             itemTemplateInfo = loader.getById('item_template', itemTemplateId, '*')
             if not itemTemplateInfo:
                 return
             itemName = itemTemplateInfo['name']
             itemComponent = Item(item[0], itemName)
             itemComponent.baseInfo.setItemTemplate(itemTemplateInfo)
             price = itemComponent.finance.getPrice()
             dbaccess.deleteItem(item[0], int(self._owner.baseInfo.id))
             dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'coin':self._owner.finance.getCoin() + price})
             self._owner.finance.setCoin(self._owner.finance.getCoin() + price)
 def _doSleep(self, index, payType, payNum, energy, energyDelta, gold,
              coupon, restRecord, type):
     id = self._owner.baseInfo.id
     if payType == 'gold':
         gold -= payNum
         if gold < 0:
             return {'result': False, 'reason': u'您的黄金量不足'}
         if type == 'spoor':
             if restRecord[index] >= 2:
                 return {'result': False, 'reason': u'您今天不能此操作'}
         else:
             if restRecord[index] >= 1:
                 return {'result': False, 'reason': u'您今天不能此操作'}
         energy += energyDelta
         if energy > 200:
             return {'result': False, 'reason': u'您的活力已达上限'}
         dbaccess.updatePlayerInfo(id, {'energy': energy, 'gold': gold})
     else:
         coupon -= payNum
         if coupon < 0:
             return {'result': False, 'reason': u'您的礼券量不足'}
         energy += energyDelta
         if energy > 200:
             return {'result': False, 'reason': u'您的活力已达上限'}
         dbaccess.updatePlayerInfo(id, {'energy': energy, 'coupon': coupon})
     return {
         'result': True,
         'data': {
             'gold': gold,
             'coupon': coupon,
             'energy': energy
         }
     }
    def doWhenPracticeFinsihed(self, attrs):
        '''当修炼结束时'''
        id = self._owner.baseInfo.id
        practiceRecord = dbaccess.getPlayerPracticeRecord(id)
        monsterId = practiceRecord[2]
        countHit = practiceRecord[3]
        finishTime = practiceRecord[5]
        now = datetime.datetime.now()

        if not finishTime or (finishTime - now).seconds < 0:
            return
        self._owner.level.setExp(attrs['exp'])
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, attrs)
        self._owner.baseInfo.setStatus(1)

        npc = loader.getById('npc', monsterId, '*')
        if npc:
#            item = None
            for i in range(0, countHit):
                self._owner.quest.onSuccessKillOneMonster(monsterId)
            
            self.placePracticeItems(countHit, npc)

        pushMessage(str(id), 'finish')
    def getMaxHp(self, professionId, characterId, characterLevel):
        '''
                    计算当前最大HP
                    体力=(基础体力+(等级)*每级成长值)*(1+附加体力%)*(1+体质*0.01)+附加体力值)*(1+装备升级时附加体力%)
        '''
        percentMaxHp = 0.0
        skillMaxHp = 0.0
        self._professionId = professionId
        self._characterLevel = characterLevel
        valuse = self._owner.pack.getEquipmentSlot()
        data = loader.getById('profession', self._professionId, '*')
        basehp = data["baseHp"]
        perlevelhp = data["perLevelHp"]
        basevit = data["baseVit"]
        perlevelvit = data["perLevelVit"]
        extraVit = self.getExtraVit()
        level = self._characterLevel
        maxHp = (basehp + (level) * perlevelhp) * (1 + self.getCurrentVit(
            self._manualVit, level, basevit, perlevelvit, extraVit) * 0.01)

        maxHpList = getCharacterExtraAttributes(self._owner.baseInfo.id,
                                                "maxHp")
        maxHpPercentList = getCharacterExtraAttributes(self._owner.baseInfo.id,
                                                       "maxHPercent")

        listLen = len(maxHpPercentList)  #加体力%
        for i in range(0, listLen):
            percentMaxHp += maxHpPercentList[i] - 1
        percentMaxHp += 1
        maxHp *= percentMaxHp

        listLen = len(maxHpList)  #加体力值
        for i in range(0, listLen):
            offsetMaxHp = maxHpList[i]
            maxHp += offsetMaxHp

        maxHp = int(maxHp * valuse) + int(maxHp)

        skillMaxHpList = self.getPassiveSkillsEffects(self._owner.baseInfo.id,
                                                      'maxHp', '+')
        listLen = len(skillMaxHpList)  #技能加体力
        for i in range(0, listLen):
            offsetMaxHp = skillMaxHpList[i]
            maxHp += offsetMaxHp

        skillMaxHpList = self.getPassiveSkillsEffects(self._owner.baseInfo.id,
                                                      'maxHp', '*')
        listLen = len(skillMaxHpList)  #技能加体力%
        for i in range(0, listLen):
            skillMaxHp += skillMaxHpList[i] - 1
        skillMaxHp += 1

        maxHp = int(maxHp * skillMaxHp)

        if self._hp > int(maxHp):
            dbaccess.updatePlayerInfo(characterId, {'hp': self._hp})
            self._hp = int(maxHp)

        return int(maxHp)
示例#12
0
def giveReward(id,coin,coupon,exp):    
    player = PlayersManager().getPlayerByID(id)
    player.finance.setCoin(int(player.finance.getCoin())+coin)
    player.level.setExp(int(player.level.getExp())+exp)
    player.finance.setCoupon(int(player.finance.getCoupon())+coupon)
    dbaccess.updatePlayerInfo(id, {'coin':int(player.finance.getCoin()),
                                   'coupon' : int(player.finance.getCoupon()),
                                   'exp' : int(player.level.getExp())})
    player.level.updateLevel()
    def getMaxHp(self, professionId, characterId, characterLevel):
        '''
                    计算当前最大HP
                    体力=(基础体力+(等级)*每级成长值)*(1+附加体力%)*(1+体质*0.01)+附加体力值)*(1+装备升级时附加体力%)
        '''
        percentMaxHp = 0.0
        skillMaxHp = 0.0
        self._professionId = professionId
        self._characterLevel = characterLevel
        valuse = self._owner.pack.getEquipmentSlot()
        data = loader.getById('profession', self._professionId, '*')
        basehp = data["baseHp"]
        perlevelhp = data["perLevelHp"]
        basevit = data["baseVit"]
        perlevelvit = data["perLevelVit"]
        extraVit = self.getExtraVit()
        level = self._characterLevel
        maxHp = (basehp + (level) * perlevelhp) * (1 + self.getCurrentVit(self._manualVit, level, basevit, perlevelvit, extraVit) * 0.01)

        maxHpList = getCharacterExtraAttributes(self._owner.baseInfo.id, "maxHp")
        maxHpPercentList = getCharacterExtraAttributes(self._owner.baseInfo.id, "maxHPercent")

        listLen = len(maxHpPercentList) #加体力%
        for i in range(0, listLen):
            percentMaxHp += maxHpPercentList[i] - 1
        percentMaxHp += 1
        maxHp *= percentMaxHp

        listLen = len(maxHpList) #加体力值
        for i in range(0, listLen):
            offsetMaxHp = maxHpList[i]
            maxHp += offsetMaxHp

        maxHp = int(maxHp * valuse) + int(maxHp)

        skillMaxHpList = self.getPassiveSkillsEffects(self._owner.baseInfo.id, 'maxHp', '+')
        listLen = len(skillMaxHpList) #技能加体力
        for i in range(0, listLen):
            offsetMaxHp = skillMaxHpList[i]
            maxHp += offsetMaxHp


        skillMaxHpList = self.getPassiveSkillsEffects(self._owner.baseInfo.id, 'maxHp', '*')
        listLen = len(skillMaxHpList) #技能加体力%
        for i in range(0, listLen):
            skillMaxHp += skillMaxHpList[i] - 1
        skillMaxHp += 1

        maxHp = int(maxHp * skillMaxHp)

        if self._hp > int(maxHp):
            dbaccess.updatePlayerInfo(characterId, {'hp':self._hp})
            self._hp = int(maxHp)

        return int(maxHp)
 def updateEnergy(self, point):
     '''修改活力'''
     energy = self._owner.attribute.getEnergy()
     if energy + point > 200:
         energy = 200
     elif energy + point < 0:
         energy = 0
     else:
         energy += point
     dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'energy': energy})
     self._owner.attribute.setEnergy(energy)
     return energy
示例#15
0
    def pratice(self, monsterId, singleExpBonus, monsterCount, monsterLevel):
        '''
                     修炼怪物
        @param monsterId: 怪物id
        @param singleExpBonus: 每个怪得到的经验奖励
        @param monsterCount: 修炼怪物数量
        @param monsterLevel: 修炼怪物等级
        '''
        id = self._owner.baseInfo.id
        energy = self._owner.attribute.getEnergy()
        if energy == 0:
            return {'result': False, 'reason': u'您的活力不够'}
        coin = self._owner.finance.getCoin()
        exp = self._owner.level.getExp()
        status = 2  #修炼状态
        costEnergy = monsterCount * 1
        totalExp = singleExpBonus * monsterCount
        costCoin = int(
            math.pow(monsterLevel, 1.1) * 9 *
            (1 + (monsterLevel / 150.0))) * monsterCount
        duration = 60 * 3 * monsterCount
        energy -= costEnergy
        coin -= costCoin
        exp += totalExp
        if energy < 0:
            return {'result': False, 'reason': u'您的活力不够'}
        if coin < 0:
            return {'result': False, 'reason': u'您的铜币不够'}
        dbaccess.updatePlayerInfo(id, {
            'status': status,
            'coin': coin,
            'energy': energy
        })
        startTime = datetime.datetime.now()
        finishTime = startTime + datetime.timedelta(minutes=3 * monsterCount)
        dbaccess.updatePlayerPracticeRecord(id, {'monsterId':monsterId, 'countHit':monsterCount, \
                                                 'startTime':str(startTime), 'finishTime':str(finishTime), \
                                                 'singleExpBonus':singleExpBonus})
        reactor.callLater(int(duration), self.doWhenPracticeFinsihed, {
            'status': 1,
            'exp': exp
        })

        self._owner.baseInfo.setStatus(status)
        self._owner.attribute.setEnergy(energy)
        self._owner.finance.setCoin(coin)

        return {
            'result': True,
            'data': {
                'status': self._owner.baseInfo.getStatus()
            }
        }
 def enterInstance(self, placeId):
     '''进入副本'''
     id = self._owner.baseInfo.id
     energy = self._owner.attribute.getEnergy()
     location = placeId
     instanceId = self._instanceId
     instanceLayerId = self._instancePlaceId
     result = False
     status = self._owner.baseInfo.getStatus()
     if status != u'正常':
         return False, u"您已经处于" + status + u"状态"
     placeInfo = loader.getById('place', placeId, '*')
     if placeInfo['levelRequire'] > self._owner.level.getLevel():
         return False, u'您的级别不够,需要达到 %d 级才能进入' % placeInfo['levelRequire']
     if instanceId <> -1:
         if location <> instanceId:
             energy -= 10
             if energy < 0:
                 return False, u'活力不足'
             if self._enterInstanceCount >= self.MAXENTERCOUNT:
                 return False, u'今日进入副本次数已经达到两次,不可重新进入新副本'
             instanceLayers = loader.get('instance', 'entryPlace', location, ['layers'])[0]['layers']
             layers = loader.getById('instance_layer', instanceLayers, ['place'])['place']
             instanceLayerId = int(layers.split(';')[0])
             attrs = {'instanceId':location, 'instanceLayerId':instanceLayerId}
             result = dbaccess.updatePlayerInstanceProgressRecord(attrs, id)
             if result:
                 dbaccess.updatePlayerInfo(id, {'energy':energy, 'enterInstanceCount':self._enterInstanceCount + 1})
                 self.init()
         else:
             result = True
     else:
         layers = loader.get('instance', 'entryPlace', location, ['layers'])
         if len(layers) < 0:
             return False, u'没有相应的副本层'
         layers = layers[0]['layers']
         if layers:
             energy -= 10
             if energy < 0:
                 return False, u'活力不足'
             places = loader.getById('instance_layer', layers, ['place'])['place'].split(';')
             instanceLayerId = int(places[0])
             props = [0, id, location, instanceLayerId, 0]
             result = dbaccess.insertPlayerInstanceProgressRecord(props)
             if result:
                 dbaccess.updatePlayerInfo(id, {'energy':energy, 'enterInstanceCount':1})
                 self._enterInstanceCount = 1
             self.init()
         else:
             return False, u'没有相应的副本层'
     self._owner.attribute.setEnergy(energy)
     self._owner.baseInfo.setLocation(instanceLayerId)
     return result, ''
示例#17
0
def giveReward(id, coin, coupon, exp):
    player = PlayersManager().getPlayerByID(id)
    player.finance.setCoin(int(player.finance.getCoin()) + coin)
    player.level.setExp(int(player.level.getExp()) + exp)
    player.finance.setCoupon(int(player.finance.getCoupon()) + coupon)
    dbaccess.updatePlayerInfo(
        id, {
            'coin': int(player.finance.getCoin()),
            'coupon': int(player.finance.getCoupon()),
            'exp': int(player.level.getExp())
        })
    player.level.updateLevel()
 def updateEnergy(self, point):
     '''修改活力'''
     energy = self._owner.attribute.getEnergy()
     if energy + point > 200:
         energy = 200
     elif energy + point < 0:
         energy = 0
     else:
         energy += point
     dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'energy':energy})
     self._owner.attribute.setEnergy(energy)
     return energy
示例#19
0
    def commitQuest(self, questId):
        '''提交任务'''
        id = self._owner.baseInfo.id

        questTemlateId = dbaccess.getQuestTemplateByQuestId(questId)
        result = self.isSatifyProgressingQuestGoals(questTemlateId)
        if not result:
            return {'result':result, 'reason':u'该任务尚未达到目标,不能完成'}
        #收集型删除任务物品
        questgoals = loader.get('questgoal', 'questId', questTemlateId, ['itemId', 'itemCount'])
        for questgoal in questgoals:
            if questgoal['itemCount'] > 0:
                dbaccess.deleteCollectionQuestItems(questgoal['itemId'], id, questgoal['itemCount'])

        dbaccess.operateForCommitQuest(questId,id)

        record = dbaccess.getQuestRecordById(questId)
        templateInfo = loader.getById('quest_template', record[1], ['coinBonus', 'type', 'expBonus'])
        coin = self._owner.finance.getCoin() + templateInfo['coinBonus']
        exp = self._owner.level.getExp() + templateInfo['expBonus']
        self._owner.finance.setCoin(coin)
        self._owner.level.setExp(exp)
        professionStage = int(self._owner.profession.getProfessionStage())
        attrs = {'coin':coin, 'exp':exp}
        if templateInfo['type'] == 2:
            #对active_reward_quest表的修改;赏金任务物品奖励持久化
            dbaccess.updateTempActiveRewardQuestByQuestTemplateId(questTemlateId, id, {'isFinish':1, 'isLock':0})
        elif templateInfo['type'] == 4:
            #转职任务
            professionStage += 1
            attrs['professionStage'] = professionStage
        dbaccess.updatePlayerInfo(self._owner.baseInfo.id, attrs)
        self._owner.profession.setProfessionStage(professionStage)
        currentProfessionStageIndex = int(self._owner.profession.getProfessionStage()) - 1
        #奖励任务奖励物品,放入玩家临时包裹蓝中
        if record[6] <> -1:
            item = dbaccess.getItemInfo(record[6])
            self._owner.pack.putOneItemIntoTempPackage(item)
            pushMessage(str(self._owner.baseInfo.id), 'newTempPackage')
            
        self._owner.pack.setTempPackage()
        self._owner.pack.setPackage()

        self.setProgressingQuests()
        if templateInfo['type'] == 2:
            pushMessage(str(self._owner.baseInfo.id), 'questFinish');
        self._owner.level.updateLevel()
        exp = self._owner.level.getExp()
        maxExp = self._owner.level.getMaxExp()
        return {'result':True, 'data':{'exp':exp,'maxExp':maxExp, 'coin':coin, \
                                      'currentProfessionStageIndex':currentProfessionStageIndex}}
示例#20
0
    def immediateFinishPractice(self, payType, payNum):
        '''立即完成修炼'''
        id = self._owner.baseInfo.id
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        exp = self._owner.level.getExp()
        if payType == 'gold':
            gold -= payNum
        else:
            coupon -= payNum
        if gold < 0:
            return {'result': False, 'reason': u'您的黄金不够'}
        if coupon < 0:
            return {'result': False, 'reason': u'您的礼券不够'}
        record = dbaccess.getPlayerPracticeRecord(id)
        countHit = record[3]
        totalExp = record[3] * record[6]
        exp += totalExp
        monster = loader.getById('npc', record[2], '*')
        monsterName = monster['name']

        item = None
        for i in range(0, countHit):
            self._owner.quest.onSuccessKillOneMonster(record[2], 'battle')
#            break
#            if item:
#                self._owner.pack.putOneItemIntoTempPackage(item,1)
        self.placePracticeItems(countHit, monster)

        self._owner.level.setExp(exp)
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, {
                'status': 1,
                'gold': gold,
                'coupon': coupon,
                'exp': exp
            })
        else:
            dbaccess.updatePlayerInfo(id, {
                'status': 1,
                'gold': gold,
                'coupon': coupon
            })

        self._owner.baseInfo.setStatus(1)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'monsterName':monsterName, 'totalExp':totalExp, 'countHit':countHit, \
                                      'gold':gold, 'coupon':coupon, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
    def learnSkill(self, skillId):
        '''学习技能'''
        id = self._owner.baseInfo.id

        skill = loader.getById('skill', skillId, '*')
        canLearn, reason = self.checkLearnSkillRequire(skill, True)
        if not canLearn:
            return False, reason

        skill = loader.getById('skill', skillId, '*')
        skills = dbaccess.getLearnedSkills(id)
        flag = False
        targetId = 0
        for elm in skills:
            info = loader.getById('skill', elm[2], ['groupType'])
            if info['groupType'] == skill['groupType']:
                flag = True
                targetId = elm[0]
                break
        if flag:
            dbaccess.updateSkillLevelForLearnSkill(targetId, {
                'skillId': skillId,
                'skillLevel': skill['level']
            })
        else:
            dbaccess.insertForLearnSkill([0, id, skillId, skill['level']])

        if skill['type'] == 3:  #被动技能习得即装备,就直接获得隐式效果
            string = ''
            for i in range(0, len(self._passiveSkills)):
                if i == 0:
                    string += str(self._passiveSkills[i])
                else:
                    string += ';' + str(self._passiveSkills[i])
            dbaccess.updatePlayerInfo(id, {'passiveSkills': string})
            addEffectIds = skill['addEffect'].split(';')
            addEffectRates = skill['addEffectRate'].split(';')
            for i in range(0, len(addEffectIds)):
                if i == 0:
                    if int(addEffectIds[i]) == -1:
                        return
                effect = loader.getById('effect', int(addEffectIds[i]), '*')
                if effect:
                    r = random.randint(0, 100000)
                    if 0 <= r < int(addEffectRates[i]):
                        self._owner.effect.triggerEffect(effect, 2)
        self.getLearnedSkills()
        self._owner.refreshInfectionOfSkill()
        return True, ''
 def removePlayerInstanceProgressInfo(self):
     '''删除玩家副本进度信息'''
     id = self._owner.baseInfo.id
     if dbaccess.deletePlayerInstanceProgressRecord(id):
         location = loader.getById('place', self._instanceId, ['regionId'])['regionId']
         dbaccess.updatePlayerInfo(id, {'location':location})
         self._owner.baseInfo.setLocation(location)
         self._instanceId = -1
         self._instanceName = u""
         self._instancePlaceId = -1
         self._instancePlaceName = u""
         self._isInstanceLocked = False
         return True
     else:
         return False
示例#23
0
 def removePlayerInstanceProgressInfo(self):
     '''删除玩家副本进度信息'''
     id = self._owner.baseInfo.id
     if dbaccess.deletePlayerInstanceProgressRecord(id):
         location = loader.getById('place', self._instanceId,
                                   ['regionId'])['regionId']
         dbaccess.updatePlayerInfo(id, {'location': location})
         self._owner.baseInfo.setLocation(location)
         self._instanceId = -1
         self._instanceName = u""
         self._instancePlaceId = -1
         self._instancePlaceName = u""
         self._isInstanceLocked = False
         return True
     else:
         return False
示例#24
0
    def immediateFinishActiveRewardQuest(self, questRecordId, payType, payNum):
        '''立即完成赏金任务'''
        id = self._owner.baseInfo.id

        templateId = dbaccess.getQuestTemplateByQuestId(questRecordId)
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        if payType == 'gold':
            gold -= payNum
            if gold < 0:
                return {'result':False, 'reason':u'您的黄金量不足'}
            dbaccess.updatePlayerInfo(id, {'gold':gold})
            self._owner.finance.setGold(gold)
        else:
            coupon -= payNum
            if coupon < 0:
                return {'result':False, 'reason':u'您的礼券量不足'}
            dbaccess.updatePlayerInfo(id, {'coupon':coupon})
            self._owner.finance.setCoupon(coupon)
        dbaccess.operateForCommitQuest(questRecordId,id)
        dbaccess.updateTempActiveRewardQuestByQuestTemplateId(templateId, id, {'isFinish':1, 'isLock':0})

        self.setProgressingQuests()

        recordList = list(dbaccess.getPlayerTempActiveRewardQuests(id))
        recordList = self.wrapFixedRewardQuestListForClient(recordList)
        progressingList = self.getProgressingQuestsGroupByType()

        questBonus = loader.getById('quest_template', templateId, ['coinBonus', 'expBonus'])
        coin = self._owner.finance.getCoin() + questBonus['coinBonus']
        self._owner.finance.setCoin(coin)
        exp = self._owner.level.getExp() + questBonus['expBonus']
        self._owner.level.setExp(exp)
        self._owner.level.updateLevel()
        record = dbaccess.getQuestRecordById(questRecordId)
        
        if record[6] <> -1:
            item = dbaccess.getItemInfo(record[6])
            self._owner.pack.putOneItemIntoTempPackage(item)
            pushMessage(str(self._owner.baseInfo.id), 'newTempPackage')
        
        self._oneQuestCallLater.cancel()
        
        return {'result':True, 'data':{'questRecordId':questRecordId, 'coupon':coupon, 'gold':gold, \
                                      'coin':coin, 'exp':exp, \
                                      'activeRewardQuestList':recordList, \
                                      'progressQuestList':progressingList}}
    def learnSkill(self, skillId):
        '''学习技能'''
        id = self._owner.baseInfo.id

        skill = loader.getById('skill', skillId, '*')
        canLearn, reason = self.checkLearnSkillRequire(skill, True)
        if not canLearn:
            return False, reason

        skill = loader.getById('skill', skillId, '*')
        skills = dbaccess.getLearnedSkills(id)
        flag = False
        targetId = 0
        for elm in skills:
            info = loader.getById('skill', elm[2], ['groupType'])
            if info['groupType'] == skill['groupType']:
                flag = True
                targetId = elm[0]
                break
        if flag:
            dbaccess.updateSkillLevelForLearnSkill(targetId, {'skillId':skillId, 'skillLevel':skill['level']})
        else:
            dbaccess.insertForLearnSkill([0, id, skillId, skill['level']])

        if skill['type'] == 3:#被动技能习得即装备,就直接获得隐式效果
            string = ''
            for i in range(0, len(self._passiveSkills)):
                if i == 0:
                    string += str(self._passiveSkills[i])
                else:
                    string += ';' + str(self._passiveSkills[i])
            dbaccess.updatePlayerInfo(id, {'passiveSkills':string})
            addEffectIds = skill['addEffect'].split(';')
            addEffectRates = skill['addEffectRate'].split(';')
            for i in range(0, len(addEffectIds)):
                if i == 0:
                    if int(addEffectIds[i]) == -1:
                        return
                effect = loader.getById('effect', int(addEffectIds[i]), '*')
                if effect:
                    r = random.randint(0, 100000)
                    if 0 <= r < int(addEffectRates[i]):
                        self._owner.effect.triggerEffect(effect, 2)
        self.getLearnedSkills()
        self._owner.refreshInfectionOfSkill()
        return True, ''
示例#26
0
    def updateLevel(self):
        '''根据经验值更新等级'''
        if self._level >= self.MAXLEVEL:
            dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'exp': 0})
            self._exp = 0
            return False

        id = self._owner.baseInfo.id
        sparePoint = self._owner.attribute.getSparePoint()
        baseStr = self._owner.attribute.getBaseStr()
        baseVit = self._owner.attribute.getBaseVit()
        baseDex = self._owner.attribute.getBaseDex()
        professionId = self._owner.profession.getProfession()
        maxExp = self.getMaxExp()
        if (self._exp >= maxExp):
            self._level += 1
            self._exp -= maxExp
            sparePoint += 1

            profession = loader.getById('profession', professionId, '*')
            baseStr += profession["perLevelStr"]
            baseVit += profession["perLevelVit"]
            baseDex += profession["perLevelDex"]
            maxHp = self._owner.attribute.getMaxHp(professionId, id,
                                                   self._level)
            maxMp = self._owner.attribute.getMaxMp(professionId, id,
                                                   self._level)
            dbaccess.updatePlayerInfo(
                id, {
                    'level': self._level,
                    'exp': self._exp,
                    'sparepoint': sparePoint,
                    'baseStr': baseStr,
                    'baseDex': baseDex,
                    'baseVit': baseVit,
                    'hp': maxHp,
                    'mp': maxMp
                })
            self._owner.attribute.setSparePoint(sparePoint)
            self._owner.attribute.setBaseStr(baseStr)
            self._owner.attribute.setBaseVit(baseVit)
            self._owner.attribute.setBaseDex(baseDex)
            pushMessage(str(self._owner.baseInfo.id), 'updataLevel')
            return True
        else:
            return False
    def reliveInTown(self):
        '''回城复活'''
        id = self._owner.baseInfo.id

        coin = self._owner.finance.getCoin()
        hp = 1
        mp = self.getMp()
        status = 1
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()

        attrs = {'hp':hp, 'mp':mp, 'status':status}
        dbaccess.updatePlayerInfo(id, attrs)
        self._owner.attribute.setHp(hp)
        self._owner.baseInfo.setStatus(status)

        return {'result':True, 'data':{'hp':hp, 'mp':mp, 'coin':coin, 'gold':gold, \
                                     'coupon':coupon, 'status':u'正常', 'type':2}}
    def reliveInTown(self):
        '''回城复活'''
        id = self._owner.baseInfo.id

        coin = self._owner.finance.getCoin()
        hp = 1
        mp = self.getMp()
        status = 1
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()

        attrs = {'hp': hp, 'mp': mp, 'status': status}
        dbaccess.updatePlayerInfo(id, attrs)
        self._owner.attribute.setHp(hp)
        self._owner.baseInfo.setStatus(status)

        return {'result':True, 'data':{'hp':hp, 'mp':mp, 'coin':coin, 'gold':gold, \
                                     'coupon':coupon, 'status':u'正常', 'type':2}}
示例#29
0
    def terminatePractice(self):
        '''
                     终止玩家修炼
        '''
        id = self._owner.baseInfo.id
        exp = self._owner.level.getExp()

        record = dbaccess.getPlayerPracticeRecord(id)
        monsterId = record[2]
        startTime = record[4]
        finishTime = record[5]
        singleExpBonus = record[6]
        now = datetime.datetime.now()
        currentCountHit = int((now - startTime).seconds / (60 * 3))
        int((finishTime - startTime).seconds / 60)
        currentExp = currentCountHit * singleExpBonus
        monster = loader.getById('npc', monsterId, '*')
        if not monster:
            return {'result': False, 'reason': u'没有找到修炼的怪物'}

        item = None
        for i in range(0, currentCountHit):
            self._owner.quest.onSuccessKillOneMonster(monsterId)
#            break
#        if item:
#            self._owner.pack.putOneItemIntoTempPackage(item, currentCountHit)
#            pushMessage(str(self._owner.baseInfo.id),'newTempPackage')
        self.placePracticeItems(currentCountHit, monster)

        monsterName = monster['name']
        self._owner.level.setExp(exp + currentExp)
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, {
                'status': 1,
                'exp': exp + currentExp
            })
        else:
            dbaccess.updatePlayerInfo(id, {'status': 1})

        self._owner.baseInfo.setStatus(1)
        return {'result':True, 'data':{'monsterName':monsterName, 'currentExp':currentExp, \
                                      'currentCountHit':currentCountHit, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
    def immediateFinishPractice(self, payType, payNum):
        '''立即完成修炼'''
        id = self._owner.baseInfo.id
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        exp = self._owner.level.getExp()
        if payType == 'gold':
            gold -= payNum
        else:
            coupon -= payNum
        if gold < 0 :
            return {'result':False, 'reason':u'您的黄金不够'}
        if coupon < 0:
            return {'result':False, 'reason':u'您的礼券不够'}
        record = dbaccess.getPlayerPracticeRecord(id)
        countHit = record[3]
        totalExp = record[3] * record[6]
        exp += totalExp
        monster = loader.getById('npc', record[2], '*')
        monsterName = monster['name']

        item = None
        for i in range(0,countHit):
            self._owner.quest.onSuccessKillOneMonster(record[2],'battle')
#            break
#            if item:
#                self._owner.pack.putOneItemIntoTempPackage(item,1)
        self.placePracticeItems(countHit, monster)

        self._owner.level.setExp(exp)
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, {'status':1, 'gold':gold, 'coupon':coupon, 'exp':exp})
        else:
            dbaccess.updatePlayerInfo(id, {'status':1, 'gold':gold, 'coupon':coupon})

        self._owner.baseInfo.setStatus(1)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'monsterName':monsterName, 'totalExp':totalExp, 'countHit':countHit, \
                                      'gold':gold, 'coupon':coupon, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
    def terminatePractice(self):
        '''
                     终止玩家修炼
        '''
        id = self._owner.baseInfo.id
        exp = self._owner.level.getExp()

        record = dbaccess.getPlayerPracticeRecord(id)
        monsterId = record[2]
        startTime = record[4]
        finishTime = record[5]
        singleExpBonus = record[6]
        now = datetime.datetime.now()
        currentCountHit = int((now - startTime).seconds / (60 * 3))
        int((finishTime - startTime).seconds / 60)
        currentExp = currentCountHit * singleExpBonus
        monster = loader.getById('npc', monsterId, '*')
        if not monster:
            return {'result':False, 'reason':u'没有找到修炼的怪物'}

        item = None
        for i in range(0, currentCountHit):
            self._owner.quest.onSuccessKillOneMonster(monsterId)
#            break
#        if item:
#            self._owner.pack.putOneItemIntoTempPackage(item, currentCountHit)
#            pushMessage(str(self._owner.baseInfo.id),'newTempPackage')
        self.placePracticeItems(currentCountHit, monster)

        monsterName = monster['name']
        self._owner.level.setExp(exp + currentExp)
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, {'status':1, 'exp':exp + currentExp})
        else:
            dbaccess.updatePlayerInfo(id, {'status':1})

        self._owner.baseInfo.setStatus(1)
        return {'result':True, 'data':{'monsterName':monsterName, 'currentExp':currentExp, \
                                      'currentCountHit':currentCountHit, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
 def reassginAttributePoint(self, payType, payNum):
     '''玩家属性洗点'''
     id = self._owner.baseInfo.id
     if payType == 'gold':
         gold = self._owner.finance.getGold()
         if payNum > gold:
             return {'result': False, 'reason': 'not have enough gold'}
         self._owner.finance.setGold(gold - payNum)
         dbaccess.updatePlayerInfo(id, {'gold': gold - payNum})
     elif payType == 'coupon':
         coupon = self._owner.finance.getCoupon()
         if payNum > coupon:
             return {'result': False, 'reason': 'not have enough coupon'}
         self._owner.finance.setCoupon(coupon - payNum)
         dbaccess.updatePlayerInfo(id, {'coupon': coupon - payNum})
     else:
         return {'result': False, 'reason': 'pay param is wrong'}
     point = self._sparePoint + self._manualStr + self._manualDex + self._manualVit
     dbaccess.updatePlayerInfo(id, {
         'sparePoint': point,
         'manualStr': 0,
         'manualVit': 0,
         'manualDex': 0
     })
     self._sparePoint = point
     self._manualStr = 0
     self._manualDex = 0
     self._manualVit = 0
     return {
         'result': True,
         'sparePoint': point,
         'manualStr': 0,
         'manualVit': 0,
         'manualDex': 0
     }
    def pratice(self, monsterId, singleExpBonus, monsterCount,monsterLevel):
        '''
                     修炼怪物
        @param monsterId: 怪物id
        @param singleExpBonus: 每个怪得到的经验奖励
        @param monsterCount: 修炼怪物数量
        @param monsterLevel: 修炼怪物等级
        '''
        id = self._owner.baseInfo.id
        energy = self._owner.attribute.getEnergy()
        if energy == 0:
            return {'result':False, 'reason':u'您的活力不够'}
        coin = self._owner.finance.getCoin()
        exp = self._owner.level.getExp()
        status = 2#修炼状态
        costEnergy = monsterCount * 1
        totalExp = singleExpBonus * monsterCount
        costCoin = int(math.pow(monsterLevel,1.1)*9*(1+(monsterLevel/150.0)))*monsterCount
        duration = 60 * 3 * monsterCount
        energy -= costEnergy
        coin -= costCoin
        exp += totalExp
        if energy < 0:
            return {'result':False, 'reason':u'您的活力不够'}
        if coin < 0:
            return {'result':False, 'reason':u'您的铜币不够'}
        dbaccess.updatePlayerInfo(id, {'status':status, 'coin':coin, 'energy':energy})
        startTime = datetime.datetime.now()
        finishTime = startTime + datetime.timedelta(minutes = 3 * monsterCount)
        dbaccess.updatePlayerPracticeRecord(id, {'monsterId':monsterId, 'countHit':monsterCount, \
                                                 'startTime':str(startTime), 'finishTime':str(finishTime), \
                                                 'singleExpBonus':singleExpBonus})
        reactor.callLater(int(duration), self.doWhenPracticeFinsihed, {'status':1, 'exp':exp})

        self._owner.baseInfo.setStatus(status)
        self._owner.attribute.setEnergy(energy)
        self._owner.finance.setCoin(coin)

        return {'result':True, 'data':{'status':self._owner.baseInfo.getStatus()}}
示例#34
0
 def setEffectsList(self):
     '''设置效果列表'''
     newSkillStr = ''
     newAuxiliarySkills = []
     id = self._owner.baseInfo.id
     auxiliarySkills = self._owner.skill.getAuxiliarySkills()
     effectInstances = dbaccess.getAllEffectInstances(id)
     
     for i in range(0,len(auxiliarySkills)):
         result = loader.getById('skill', auxiliarySkills[i], '*')
         effectList = result['addEffect'].split(';')
         effectCounts = len(effectList)
         difference = len(effectList)
         for list in effectList:
             for instance in effectInstances:
                 effectInfo = loader.getById('effect', instance[2], ['icon', 'disPlayMode'])
                 icon = effectInfo['icon']
                 effectDisplayMode = effectInfo['disPlayMode']
     
                 instance.append(icon)
                 if instance[6] == 1:
                     self._currentEffects.append(instance)
                 elif instance[6] == 2:
                     if effectDisplayMode == 3:#进入隐形状态列表
                         self._invisibleEffects.append(instance)
                     elif effectDisplayMode == 2:
                         self._skillEffects.append(instance)
                 if list == instance[2]:
                     difference -= 1
         if difference != effectCounts:
             newAuxiliarySkills.append(auxiliarySkills[i])
             if newSkillStr == '':
                 newSkillStr += str(auxiliarySkills[i])
             else:
                 newSkillStr += ',' + str(auxiliarySkills[i])
                 
     self._owner.skill.setAuxiliarySkills(newAuxiliarySkills)
     
     dbaccess.updatePlayerInfo(id, {'auxiliarySkills':newSkillStr})
    def getResultDataForClient(self):
        result = dbaccess.getLastBattleRecord(self._owner.baseInfo.id)
        if result is None:
            dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'status':1, 'hp':1})
            return None
        data_bak = util.parsePickleStrToObject(result[2])
        data = data_bak.copy()
        del data['owner_status']
        user_data = data_bak['owner_status']
        battleTime = datetime.datetime.strptime(data['battleEventProcessList'][0][3][2], '%Y-%m-%d %H:%M:%S.%f')
        now = datetime.datetime.now()
        d = now - battleTime
        if d.days >= 1 or d.seconds >= data['overTime']:
            updateCharacterAttr(user_data['fighter'], user_data['enemy'], user_data['battleType'], user_data['battleResult'])
            return None

        delta = d.seconds
#        split data
#        bepl = data['battleEventProcessList']
#        index = 0
#        content = None
#        set = False
#        for i in range(len(bepl)):
#            if bepl[i][0] > delta and bepl[i][1] == CharacterBattleComponent.BATTLE_ATTACK:
#                index = i
#                set = True
#        if set and index != 0:
#            content = bepl[index][3]
#            first = bepl[0]
#            end = bepl[index:-1]
#            #[0, CharacterBattleComponent.BATTLE_START, -1, [[fighter], [self.fighter_enemy.copy()], str(datetime.datetime.now())]
#            first[3][0][0]['hp'] = content['party1Hp']
#            first[3][1][0]['hp'] = content['party2Hp']
#            first[3][0][0]['mp'] = content['party1Mp']
#            first[3][1][0]['mp'] = content['party2Mp']
#            data['battleEventProcessList'] = first + end
        data['maxTime'] -= delta * 3
        return data
    def reliveInCurrentPlace(self, coinNum):
        '''原地复活'''
        id = self._owner.baseInfo.id
        profession = self._owner.profession.getProfession()
        level = self._owner.level.getLevel()

        coin = self._owner.finance.getCoin() - coinNum
        if coin < 0:
            return {'result': False, 'reason': u'您的铜币量不足'}
        hp = self.getMaxHp(profession, id, level) / 2
        mp = self.getMp()
        status = 1
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        attrs = {'status': status, 'coin': coin, 'hp': hp}
        dbaccess.updatePlayerInfo(id, attrs)

        self._owner.attribute.setHp(hp)
        self._owner.baseInfo.setStatus(status)
        self._owner.finance.setCoin(coin)

        return{'result':True, 'data':{'hp':hp, 'mp':mp, 'coin':coin, 'gold':gold, \
                                     'coupon':coupon, 'status':u'正常', 'type':1}}
    def reliveInCurrentPlace(self, coinNum):
        '''原地复活'''
        id = self._owner.baseInfo.id
        profession = self._owner.profession.getProfession()
        level = self._owner.level.getLevel()

        coin = self._owner.finance.getCoin() - coinNum
        if coin < 0:
            return {'result':False, 'reason':u'您的铜币量不足'}
        hp = self.getMaxHp(profession, id, level) / 2
        mp = self.getMp()
        status = 1
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        attrs = {'status':status, 'coin':coin, 'hp':hp}
        dbaccess.updatePlayerInfo(id, attrs)

        self._owner.attribute.setHp(hp)
        self._owner.baseInfo.setStatus(status)
        self._owner.finance.setCoin(coin)

        return{'result':True, 'data':{'hp':hp, 'mp':mp, 'coin':coin, 'gold':gold, \
                                     'coupon':coupon, 'status':u'正常', 'type':1}}
示例#38
0
    def calcImmeEffectForPlayer(self, effect):
        '''计算瞬时效果对玩家属性的影响'''
        owner = {}
        owner['hp'] = self._owner.attribute.getHp()
        owner['mp'] = self._owner.attribute.getMp()
        try:
            exec(effect['script'])
        except:
            pass

        profession = self._owner.profession.getProfession()
        id = self._owner.baseInfo.id
        level = self._owner.level.getLevel()
        maxHp = self._owner.attribute.getMaxHp(profession, id, level)
        maxMp = self._owner.attribute.getMaxMp(profession, id, level)
        if owner['hp'] > maxHp:
            owner['hp'] = maxHp
        if owner['mp'] > maxMp:
            owner['mp'] = maxMp
        dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'hp':owner['hp'], 'mp':owner['mp']})
        self._owner.attribute.setHp(owner['hp'])
        self._owner.attribute.setMp(owner['mp'])
        return owner['hp'], owner['mp']
    def updateLevel(self):
        '''根据经验值更新等级'''
        if self._level >= self.MAXLEVEL:
            dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'exp' : 0})
            self._exp = 0
            return False

        id = self._owner.baseInfo.id
        sparePoint = self._owner.attribute.getSparePoint()
        baseStr = self._owner.attribute.getBaseStr()
        baseVit = self._owner.attribute.getBaseVit()
        baseDex = self._owner.attribute.getBaseDex()
        professionId = self._owner.profession.getProfession()
        maxExp = self.getMaxExp()
        if(self._exp >= maxExp):
            self._level += 1
            self._exp -= maxExp
            sparePoint += 1

            profession = loader.getById('profession', professionId, '*')
            baseStr += profession["perLevelStr"]
            baseVit += profession["perLevelVit"]
            baseDex += profession["perLevelDex"]
            maxHp = self._owner.attribute.getMaxHp(professionId, id, self._level)
            maxMp = self._owner.attribute.getMaxMp(professionId, id, self._level)
            dbaccess.updatePlayerInfo(id, {'level' : self._level, 'exp' : self._exp,
                                           'sparepoint' : sparePoint, 'baseStr' : baseStr,
                                           'baseDex' : baseDex, 'baseVit' : baseVit,
                                           'hp' : maxHp, 'mp' : maxMp})
            self._owner.attribute.setSparePoint(sparePoint)
            self._owner.attribute.setBaseStr(baseStr)
            self._owner.attribute.setBaseVit(baseVit)
            self._owner.attribute.setBaseDex(baseDex)
            pushMessage(str(self._owner.baseInfo.id), 'updataLevel')
            return True
        else:
            return False
    def updateCharacter(body):
        if int(body['hp']) <= 0:
            status = 5# "死亡"
        else:
            status = 1#"正常"
        try:
            assert status == body['status']
        except Exception as e:
            log.msg(str(e))

        body['_instance_'].baseInfo.setStatus(status)

        gold = body['_instance_'].finance.getGold()
        coin = body['_instance_'].finance.getCoin()
        exp = body['_instance_'].level.getExp()

        if battleType == 1 or battleType == 2:
            if body['id'] in battleResult['winner']:
                if body['hp'] <= 0:
                    dbaccess.updatePlayerInfo(
                        int(body['id']),
                        {
                            'status':1,
                            'hp' : 1,
                            'mp' : body['mp'],
                            'gold' : gold + int(battleResult['goldBonus']),
                            'coin' : coin + int(battleResult['coinBonus']),
                            'exp':exp + battleResult['expBonus'],
                        }
                    )
                else:
                    dbaccess.updatePlayerInfo(
                        int(body['id']),
                        {
                            'status':status,
                            'hp' : body['hp'],
                            'mp' : body['mp'],
                            'gold' : gold + int(battleResult['goldBonus']),
                            'coin' : coin + int(battleResult['coinBonus']),
                            'exp':exp + battleResult['expBonus'],
                        }
                    )
            else:
                dbaccess.updatePlayerInfo(
                        int(body['id']),
                        {
                            'status':status,
                            'hp' : body['hp'],
                            'mp' : body['mp'],
                        }
                )
 def reassginAttributePoint(self, payType, payNum):
     '''玩家属性洗点'''
     id = self._owner.baseInfo.id
     if payType == 'gold':
         gold = self._owner.finance.getGold()
         if payNum > gold:
             return {'result':False, 'reason':'not have enough gold'}
         self._owner.finance.setGold(gold - payNum)
         dbaccess.updatePlayerInfo(id, {'gold':gold - payNum})
     elif payType == 'coupon':
         coupon = self._owner.finance.getCoupon()
         if payNum > coupon:
             return {'result':False, 'reason':'not have enough coupon'}
         self._owner.finance.setCoupon(coupon - payNum)
         dbaccess.updatePlayerInfo(id, {'coupon':coupon - payNum})
     else:
         return {'result':False, 'reason':'pay param is wrong'}
     point = self._sparePoint + self._manualStr + self._manualDex + self._manualVit
     dbaccess.updatePlayerInfo(id, {'sparePoint':point, 'manualStr':0, 'manualVit':0, 'manualDex':0})
     self._sparePoint = point
     self._manualStr = 0
     self._manualDex = 0
     self._manualVit = 0
     return {'result':True, 'sparePoint':point, 'manualStr':0, 'manualVit':0, 'manualDex':0}
    def addAttributePoint(self, type, all):
        '''玩家属性加点'''
        characterId = self._owner.baseInfo.id
        point = 0
        if self._sparePoint <= 0:
            return {'result':False}
        if all == 0:
            self._sparePoint -= 1
            if type == 'manualStr':
                self._manualStr += 1
                dbaccess.updatePlayerInfo(characterId, {'sparePoint':self._sparePoint, type:self._manualStr})
                point = self._manualStr
            elif type == 'manualVit':
                self._manualVit += 1
                dbaccess.updatePlayerInfo(characterId, {'sparePoint':self._sparePoint, type:self._manualVit})
                point = self._manualVit
            elif type == 'manualDex':
                self._manualDex += 1
                dbaccess.updatePlayerInfo(characterId, {'sparePoint':self._sparePoint, type:self._manualDex})
                point = self._manualDex
        elif all == 1:
            if type == "manualStr":
                self._manualStr += self._sparePoint
                dbaccess.updatePlayerInfo(characterId, {'sparePoint':0 , type:self._manualStr})
                point = self._manualStr
            elif type == "manualVit":
                self._manualVit += self._sparePoint
                dbaccess.updatePlayerInfo(characterId, {'sparePoint':0 , type:self._manualVit})
                point = self._manualVit
            elif type == "manualDex":
                self._manualDex += self._sparePoint
                dbaccess.updatePlayerInfo(characterId, {'sparePoint':0 , type:self._manualDex})
                point = self._manualDex
            self._sparePoint = 0

        return{'result':True, 'sparePoint':self._sparePoint, 'type':type, 'point':point}
    def initBattleInfo(self, enemy, battleType, timeLimit = 360):
        '''battleType 1,野外战斗;2,副本战斗;3,决斗'''
        self.fighter_owner = self._owner.getCommonValues_delta()
        self.fighter_enemy = enemy.getCommonValues_delta()

        if self.__SAVEDATA2DB__:
            pass

        if battleType == 1 or battleType == 2:
            if battleType == 1:
                self._owner.attribute.setEnergy(self._owner.attribute.getEnergy() - 1)
            dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'status':4, 'energy':self._owner.attribute.getEnergy()})
            #dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'energy':self._owner.attribute.getEnergy()})
            self._owner.baseInfo.setStatus(4)

        #当决斗时,双方皆从满血满魔状态开始
        if battleType == 3:
            self.fighter_enemy["hp"] = self.fighter_enemy["maxHp"]
            self.fighter_owner["hp"] = self.fighter_owner["maxHp"]
            self.fighter_enemy["mp"] = self.fighter_enemy["maxMp"]
            self.fighter_owner["mp"] = self.fighter_owner["maxMp"]
        #计算等级差
        level_diffence = self.fighter_owner["level"] - self.fighter_enemy["level"]
        flag = 1
        delta = 0
        if level_diffence < 0:
            flag = -1
            level_diffence = -level_diffence
        if level_diffence == 0:
            delta = 0
        elif level_diffence <= 1:
            delta = -0.1
        elif level_diffence <= 5:
            delta = -0.2
        elif level_diffence <= 10:
            delta = -0.3
        elif level_diffence <= 16:
            delta = -0.4
        elif level_diffence <= 25:
            delta = -0.5
        else:
            delta = -0.6
        #设定根据等级差带来的影响,这里只影响攻击力和防御力
        if flag > 0:
            self.fighter_enemy["defense"] *= 1 + delta
            self.fighter_enemy["maxAttack"] *= 1 + delta
            self.fighter_enemy["minAttack"] *= 1 + delta
        else:
            self.fighter_owner["defense"] *= 1 + delta
            self.fighter_owner["maxAttack"] *= 1 + delta
            self.fighter_owner["minAttack"] *= 1 + delta

        #增加角色附加记录
        def addExtraProperties(body):
            body['lastAttackTime'] = 0
            body['status'] = 4
            #body['activeSkill'] = None
            body['effects'] = []
            body['damage'] = 0
            body['attackStatus'] = [0]
            body['attackSentence'] = body['startBattleSentence']
            body['skillName'] = ''
            body['_lastfight_first'] = False
            body['_win_battle_'] = False

        addExtraProperties(self.fighter_enemy)
        addExtraProperties(self.fighter_owner)

        eventList = []
        fighter = self.fighter_owner.copy()
        fighter['name'] = self.fighter_owner['_instance_'].baseInfo.getNickName()
        eventList.append([0, CharacterBattleComponent.BATTLE_START, -1, [[fighter], [self.fighter_enemy.copy()], str(datetime.datetime.now())]])
        for k in self.fighter_owner["extraEffects"]:
            effect = _getEffect(k[2])
            if effect:
                c1, c2 = self.getEffect(self.fighter_owner, effect)
                eventList.append(c1)
                eventList.append(c2)
        for k in self.fighter_enemy["extraEffects"]:
            effect = _getEffect(k[2])
            if effect:
                c1, c2 = self.getEffect(self.fighter_enemy, effect)
                eventList.append(c1)
                eventList.append(c2)

        return eventList
    def doRest(self, type, payType, payNum):
        '''执行宿屋操作'''
        id = self._owner.baseInfo.id
        profession = self._owner.profession.getProfession()
        level = self._owner.level.getLevel()
        coin = self._owner.finance.getCoin()
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        hp = self.getHp()
        mp = self.getMp()
        energy = self.getEnergy()
        count = 0

        restRecord = dbaccess.getPlayerRestRecord(id)
        if type == 'meal':#用餐
            hp = self.getMaxHp(profession, id, level)
            mp = self.getMaxMp(profession, id, level)
            coin -= payNum
            if coin < 0:
                return {'result':False, 'reason':u'您的铜币量不足'}
            count = -1
            dbaccess.updatePlayerInfo(id, {'hp':hp, 'mp':mp, 'coin':coin})
        elif type == 'nap':#小憩
            energyDelta = payNum
            result = self._doSleep(2, payType, payNum, energy, energyDelta, gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 1 - (int(restRecord[2]) + 1)
            dbaccess.updatePlayerRestRecord(id, {'napCount':restRecord[2] + 1})
        elif type == 'lightSleep':#浅睡
            energyDelta = payNum
            result = self._doSleep(3, payType, payNum, energy, energyDelta, gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 1 - (int(restRecord[3]) + 1)
            dbaccess.updatePlayerRestRecord(id, {'lightSleepCount':restRecord[3] + 1})
        elif type == 'peacefulSleep':#安眠
            energyDelta = payNum
            result = self._doSleep(4, payType, payNum, energy, energyDelta, gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 1 - (int(restRecord[4]) + 1)
            dbaccess.updatePlayerRestRecord(id, {'peacefulSleepCount':restRecord[4] + 1})
        elif type == 'spoor':#酣睡
            energyDelta = payNum
            result = self._doSleep(5, payType, payNum, energy, energyDelta, gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 2 - (int(restRecord[5]) + 1)
            dbaccess.updatePlayerRestRecord(id, {'spoorCount':restRecord[5] + 1})

        self.setHp(hp)
        self.setMp(mp)
        self.setEnergy(energy)
        self._owner.finance.setCoin(coin)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'hp':hp, 'mp':mp, 'energy':energy, 'gold':gold, \
                                      'coupon':coupon, 'coin':coin, 'type':type, 'count':count}}
    def equipSkill(self, skillId, skillType):
        '''装备技能'''
        id = self._owner.baseInfo.id

        targetSkill = loader.getById('skill', skillId, '*')
        if targetSkill:
            if targetSkill['type'] <> skillType:
                return False, u'装备技能地方不正确,请查看'
            if targetSkill['type'] == 1:  #主动技能
                dbaccess.updatePlayerInfo(id, {'activeSkill': skillId})
                self.setActiveSkill(skillId)
                return True, [u'装备成功', targetSkill]
            elif targetSkill['type'] == 2:  #辅助技能
                if self._owner.attribute.getMp() < targetSkill['useMp']:
                    return False, u'法力值不够'
                auxiliarySkills = self.getAuxiliarySkills()
                if skillId in auxiliarySkills:
                    return False, u'该辅助技能已经在应用中'
                else:
                    #                    for i in range(0, len(auxiliarySkills)):
                    #                        result = loader.getById('skill', auxiliarySkills[i], '*')
                    #                        if result['groupType'] == targetSkill['groupType']:
                    #                            if result['level'] < targetSkill['level']:
                    #                                auxiliarySkills[i] = skillId
                    #                                effecList = result['addEffect'].split(';')
                    #                                for list in effectList:
                    #                                    dbaccess.deleteEffectInstance(id, list)
                    #                            else:
                    #                                return False, u'无法装备同类型等级的技能'
                    #                        else:
                    #                            auxiliarySkills.append(skillId)
                    if len(auxiliarySkills) == 0:
                        auxiliarySkills.append(skillId)
                    else:
                        return False, u'无法装备多个辅助技能'
                    string = ''
                    for i in range(0, len(auxiliarySkills)):
                        if i == 0:
                            string += str(auxiliarySkills[i])
                        else:
                            string += ',' + str(auxiliarySkills[i])
                    deltaMp = self._owner.attribute.getMp(
                    ) - targetSkill['useMp']
                    dbaccess.updatePlayerInfo(id, {
                        'mp': deltaMp,
                        'auxiliarySkills': string
                    })
                    self._owner.attribute.setMp(deltaMp)
                #增加效果
                addEffectIds = targetSkill['addEffect'].split(';')
                addEffectRates = targetSkill['addEffectRate'].split(';')
                for i in range(0, len(addEffectIds)):
                    r = random.randint(0, int(addEffectRates[i]))
                    if r > 0 and r < addEffectRates[i]:
                        effect = loader.getById('effect', int(addEffectIds[i]),
                                                '*')
                        if effect:
                            self._owner.effect.triggerEffect(effect, 2)
                #删除效果
                removeEffectIds = targetSkill['removeEffect'].split(';')
                removeEffectRates = targetSkill['removeEffectRate'].split(';')
                for i in range(0, len(removeEffectIds)):
                    r = random.randint(0, int(removeEffectRates[i]))
                    if r > 0 and r < int(removeEffectRates[i]):
                        dbaccess.deleteEffectInstance(id, effect['id'])

                return True, [
                    u'装备成功', self._owner.effect.getSkillEffectsInfo()
                ]
            elif targetSkill['type'] == 3:  #被动技能
                return False, u'被动技能无法装备'
        else:
            return False, u'技能尚未修炼'
示例#46
0
 def enterInstance(self, placeId):
     '''进入副本'''
     id = self._owner.baseInfo.id
     energy = self._owner.attribute.getEnergy()
     location = placeId
     instanceId = self._instanceId
     instanceLayerId = self._instancePlaceId
     result = False
     status = self._owner.baseInfo.getStatus()
     if status != u'正常':
         return False, u"您已经处于" + status + u"状态"
     placeInfo = loader.getById('place', placeId, '*')
     if placeInfo['levelRequire'] > self._owner.level.getLevel():
         return False, u'您的级别不够,需要达到 %d 级才能进入' % placeInfo['levelRequire']
     if instanceId <> -1:
         if location <> instanceId:
             energy -= 10
             if energy < 0:
                 return False, u'活力不足'
             if self._enterInstanceCount >= self.MAXENTERCOUNT:
                 return False, u'今日进入副本次数已经达到两次,不可重新进入新副本'
             instanceLayers = loader.get('instance', 'entryPlace', location,
                                         ['layers'])[0]['layers']
             layers = loader.getById('instance_layer', instanceLayers,
                                     ['place'])['place']
             instanceLayerId = int(layers.split(';')[0])
             attrs = {
                 'instanceId': location,
                 'instanceLayerId': instanceLayerId
             }
             result = dbaccess.updatePlayerInstanceProgressRecord(attrs, id)
             if result:
                 dbaccess.updatePlayerInfo(
                     id, {
                         'energy': energy,
                         'enterInstanceCount': self._enterInstanceCount + 1
                     })
                 self.init()
         else:
             result = True
     else:
         layers = loader.get('instance', 'entryPlace', location, ['layers'])
         if len(layers) < 0:
             return False, u'没有相应的副本层'
         layers = layers[0]['layers']
         if layers:
             energy -= 10
             if energy < 0:
                 return False, u'活力不足'
             places = loader.getById('instance_layer', layers,
                                     ['place'])['place'].split(';')
             instanceLayerId = int(places[0])
             props = [0, id, location, instanceLayerId, 0]
             result = dbaccess.insertPlayerInstanceProgressRecord(props)
             if result:
                 dbaccess.updatePlayerInfo(id, {
                     'energy': energy,
                     'enterInstanceCount': 1
                 })
                 self._enterInstanceCount = 1
             self.init()
         else:
             return False, u'没有相应的副本层'
     self._owner.attribute.setEnergy(energy)
     self._owner.baseInfo.setLocation(instanceLayerId)
     return result, ''
    def equipSkill(self, skillId, skillType):
        '''装备技能'''
        id = self._owner.baseInfo.id

        targetSkill = loader.getById('skill', skillId, '*')
        if targetSkill:
            if targetSkill['type'] <> skillType:
                return False, u'装备技能地方不正确,请查看'
            if targetSkill['type'] == 1:#主动技能
                dbaccess.updatePlayerInfo(id, {'activeSkill':skillId})
                self.setActiveSkill(skillId)
                return True, [u'装备成功', targetSkill]
            elif targetSkill['type'] == 2:#辅助技能
                if self._owner.attribute.getMp() < targetSkill['useMp']:
                    return False, u'法力值不够'
                auxiliarySkills = self.getAuxiliarySkills()
                if skillId in auxiliarySkills:
                    return False, u'该辅助技能已经在应用中'
                else:
#                    for i in range(0, len(auxiliarySkills)):
#                        result = loader.getById('skill', auxiliarySkills[i], '*')
#                        if result['groupType'] == targetSkill['groupType']:
#                            if result['level'] < targetSkill['level']:
#                                auxiliarySkills[i] = skillId
#                                effecList = result['addEffect'].split(';')
#                                for list in effectList:
#                                    dbaccess.deleteEffectInstance(id, list)
#                            else:
#                                return False, u'无法装备同类型等级的技能'
#                        else:
#                            auxiliarySkills.append(skillId)
                    if len(auxiliarySkills) == 0:
                        auxiliarySkills.append(skillId)
                    else:
                        return False, u'无法装备多个辅助技能'
                    string = ''
                    for i in range(0, len(auxiliarySkills)):
                        if i == 0:
                            string += str(auxiliarySkills[i])
                        else:
                            string += ',' + str(auxiliarySkills[i])
                    deltaMp = self._owner.attribute.getMp() - targetSkill['useMp']
                    dbaccess.updatePlayerInfo(id, {'mp':deltaMp, 'auxiliarySkills':string})
                    self._owner.attribute.setMp(deltaMp)
                #增加效果
                addEffectIds = targetSkill['addEffect'].split(';')
                addEffectRates = targetSkill['addEffectRate'].split(';')
                for i in range(0, len(addEffectIds)):
                    r = random.randint(0, int(addEffectRates[i]))
                    if r > 0 and r < addEffectRates[i]:
                        effect = loader.getById('effect', int(addEffectIds[i]), '*')
                        if effect:
                            self._owner.effect.triggerEffect(effect, 2)
                #删除效果
                removeEffectIds = targetSkill['removeEffect'].split(';')
                removeEffectRates = targetSkill['removeEffectRate'].split(';')
                for i in range(0, len(removeEffectIds)):
                    r = random.randint(0, int(removeEffectRates[i]))
                    if r > 0 and r < int(removeEffectRates[i]):
                        dbaccess.deleteEffectInstance(id, effect['id'])

                return True, [u'装备成功', self._owner.effect.getSkillEffectsInfo()]
            elif targetSkill['type'] == 3:#被动技能
                return False, u'被动技能无法装备'
        else:
            return False, u'技能尚未修炼'
    def doRest(self, type, payType, payNum):
        '''执行宿屋操作'''
        id = self._owner.baseInfo.id
        profession = self._owner.profession.getProfession()
        level = self._owner.level.getLevel()
        coin = self._owner.finance.getCoin()
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        hp = self.getHp()
        mp = self.getMp()
        energy = self.getEnergy()
        count = 0

        restRecord = dbaccess.getPlayerRestRecord(id)
        if type == 'meal':  #用餐
            hp = self.getMaxHp(profession, id, level)
            mp = self.getMaxMp(profession, id, level)
            coin -= payNum
            if coin < 0:
                return {'result': False, 'reason': u'您的铜币量不足'}
            count = -1
            dbaccess.updatePlayerInfo(id, {'hp': hp, 'mp': mp, 'coin': coin})
        elif type == 'nap':  #小憩
            energyDelta = payNum
            result = self._doSleep(2, payType, payNum, energy, energyDelta,
                                   gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 1 - (int(restRecord[2]) + 1)
            dbaccess.updatePlayerRestRecord(id,
                                            {'napCount': restRecord[2] + 1})
        elif type == 'lightSleep':  #浅睡
            energyDelta = payNum
            result = self._doSleep(3, payType, payNum, energy, energyDelta,
                                   gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 1 - (int(restRecord[3]) + 1)
            dbaccess.updatePlayerRestRecord(
                id, {'lightSleepCount': restRecord[3] + 1})
        elif type == 'peacefulSleep':  #安眠
            energyDelta = payNum
            result = self._doSleep(4, payType, payNum, energy, energyDelta,
                                   gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 1 - (int(restRecord[4]) + 1)
            dbaccess.updatePlayerRestRecord(
                id, {'peacefulSleepCount': restRecord[4] + 1})
        elif type == 'spoor':  #酣睡
            energyDelta = payNum
            result = self._doSleep(5, payType, payNum, energy, energyDelta,
                                   gold, coupon, restRecord, type)
            if not result['result']:
                return result
            gold = result['data']['gold']
            coupon = result['data']['coupon']
            energy = result['data']['energy']
            count = 2 - (int(restRecord[5]) + 1)
            dbaccess.updatePlayerRestRecord(id,
                                            {'spoorCount': restRecord[5] + 1})

        self.setHp(hp)
        self.setMp(mp)
        self.setEnergy(energy)
        self._owner.finance.setCoin(coin)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'hp':hp, 'mp':mp, 'energy':energy, 'gold':gold, \
                                      'coupon':coupon, 'coin':coin, 'type':type, 'count':count}}
    def addAttributePoint(self, type, all):
        '''玩家属性加点'''
        characterId = self._owner.baseInfo.id
        point = 0
        if self._sparePoint <= 0:
            return {'result': False}
        if all == 0:
            self._sparePoint -= 1
            if type == 'manualStr':
                self._manualStr += 1
                dbaccess.updatePlayerInfo(characterId, {
                    'sparePoint': self._sparePoint,
                    type: self._manualStr
                })
                point = self._manualStr
            elif type == 'manualVit':
                self._manualVit += 1
                dbaccess.updatePlayerInfo(characterId, {
                    'sparePoint': self._sparePoint,
                    type: self._manualVit
                })
                point = self._manualVit
            elif type == 'manualDex':
                self._manualDex += 1
                dbaccess.updatePlayerInfo(characterId, {
                    'sparePoint': self._sparePoint,
                    type: self._manualDex
                })
                point = self._manualDex
        elif all == 1:
            if type == "manualStr":
                self._manualStr += self._sparePoint
                dbaccess.updatePlayerInfo(characterId, {
                    'sparePoint': 0,
                    type: self._manualStr
                })
                point = self._manualStr
            elif type == "manualVit":
                self._manualVit += self._sparePoint
                dbaccess.updatePlayerInfo(characterId, {
                    'sparePoint': 0,
                    type: self._manualVit
                })
                point = self._manualVit
            elif type == "manualDex":
                self._manualDex += self._sparePoint
                dbaccess.updatePlayerInfo(characterId, {
                    'sparePoint': 0,
                    type: self._manualDex
                })
                point = self._manualDex
            self._sparePoint = 0

        return {
            'result': True,
            'sparePoint': self._sparePoint,
            'type': type,
            'point': point
        }