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}
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
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 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 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
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, ''
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
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}}
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
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
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, ''
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}}
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()}}
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}}
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'技能尚未修炼'
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 }